Problema com JSF : ViewExpiredException

1 resposta
L

Boa noite pessoal,
estou com um problema estranho tentando executar uma aplicação simples com JSF 1.2 e Tomcat 6.0.8. Eu criei um novo Dynamic Web Project no Eclipse e uma página simples de teste de envio com um campo apenas:

listaPessoa.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@taglib prefix="a4j" uri="http://richfaces.org/a4j"%>
<%@taglib prefix="rich" uri="http://richfaces.org/rich"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
<a4j:log />

	<h:form id="formAdicionar">
		<h:outputText value="Nome: " />
		<h:inputText id="nome" value="#{pessoaList.nome}" size="30">
			<f:validateLength minimum="3" />			
		</h:inputText>
				
		<h:panelGroup id="p_nome">
			<h:message for="nome" />
		</h:panelGroup>

		<h:commandButton action="lala" value="Teste" />

	</h:form>

</f:view>
</body>
</html>

Após iniciar a aplicação eu entro nesta página (listaPessoa.jsp) sem problemas, mas no momento em que submeto o form a seguinte exceção é lançada:

exception

javax.servlet.ServletException: viewId:/listaPessoa.jsf - View /listaPessoa.jsf could not be restored.
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:323)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)

root cause

javax.faces.application.ViewExpiredException: viewId:/listaPessoa.jsf - View /listaPessoa.jsf could not be restored.
	com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:208)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:102)
	com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)

É algo estranho tendo em vista que foi realizada na primeira submissão e não houve tempo algum para expirar a sessão.
Procurei este erro em diversos lugares, inclusive em um post aqui do guj: [url]http://www.guj.com.br/posts/list/0/85236.java#460553[/url]

Verifiquei que quando eu mudo o State Saving Method pra "client" o problema desaparece e a aplicação funciona sem problemas, porém não intendi porque e não gostaria de ter que deixar desta maneira. Existe alguma forma de deixar o State Saving no servidor?

Aqui vão meu faces-config e web.xml:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ProjetoDinamicoWeb</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
  
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  
  <filter> 
   <display-name>RichFaces Filter</display-name> 
   <filter-name>richfaces</filter-name> 
   <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 

<filter-mapping>
   <filter-name>richfaces</filter-name>
   <servlet-name>Faces Servlet</servlet-name>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
   <dispatcher>INCLUDE</dispatcher>
</filter-mapping>  
  
  <servlet>
    <description></description>
    <display-name>FirstServlet</display-name>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/FirstServlet</url-pattern>
  </servlet-mapping>
  
  <context-param>
   <param-name>org.richfaces.SKIN</param-name>
   <param-value>ruby</param-value>
</context-param>

<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>100</param-value>
</context-param> 


<context-param>
      <param-name>org.richfaces.CONTROL_SKINNING</param-name>
      <param-value>enable</param-value>
</context-param>

  
</web-app>

Faces-Config:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
 <managed-bean>
  <managed-bean-name>pessoaList</managed-bean-name>
  <managed-bean-class>br.com.loja.PessoaList</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
   <property-name>pessoaNova</property-name>
   <property-class>br.com.basicas.Pessoa</property-class>
   <value>#{pessoa}</value>
  </managed-property>
 </managed-bean>
 <managed-bean>
  <managed-bean-name>pessoa</managed-bean-name>
  <managed-bean-class>br.com.basicas.Pessoa</managed-bean-class>
  <managed-bean-scope>none</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <from-view-id>/listaPessoa.jsp</from-view-id>
  <navigation-case>
   <from-outcome>lala</from-outcome>
   <to-view-id>/pagina.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>

Ps: Tentei retirar o rich faces pra saber se ele estava causando o problema mas o erro continuou da mesma maneira.

Obrigado

1 Resposta

G

pois é, eu uso com o State Saving Method setado para server.

eu uso praticamente sempre esse web.xml, tem facelets junto, mas é so ignora a parte do facelets...
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>educaWeb</display-name>
  	<!-- listener jsf -->
	 <listener>
	  <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	 </listener>
	 
	<!-- facelets -->
	<context-param>
	  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
	  <param-value>.xhtml</param-value>
	 </context-param>
	 <context-param>
	  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
	  <param-value>server</param-value>
	 </context-param>
	 <context-param>
	  <param-name>facelets.REFRESH_PERIOD</param-name>
	  <param-value>2</param-value>
	 </context-param>
	 <context-param>
	  <param-name>facelets.DEVELOPMENT</param-name>
	  <param-value>true</param-value>
	 </context-param>
	 <context-param>
	  <param-name>com.sun.faces.validateXml</param-name>
	  <param-value>false</param-value>
	 </context-param>
	 <context-param>
	  <param-name>com.sun.faces.verifyObjects</param-name>
	  <param-value>false</param-value>
	 </context-param>
	 
	  <!-- RichFaces -->
	<!-- escolhe a skin -->
	 <context-param>
	  <param-name>org.richfaces.SKIN</param-name>
	  <param-value>blueSky</param-value>
	 </context-param>
	 <!-- aplica skin em todo projeto --> 
	 <context-param>
	  <param-name>org.richfaces.CONTROL_SKINNING</param-name>
	  <param-value>enable</param-value>
	 </context-param>
	 
	 <!-- facelets com richfaces -->
	 <context-param>
	  <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
	  <param-value>com.sun.facelets.FaceletViewHandler</param-value>
	 </context-param>
	
	 <!--diz a aplicação onde esta o arquivo de configuração do spring-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <!-- filtro richfaces -->
     <filter>
	  <display-name>RichFaces Filter</display-name>
	  <filter-name>richfaces</filter-name>
	  <filter-class>org.ajax4jsf.Filter</filter-class>
	 </filter>
	 

	 <!-- richfaces -->
	  <filter-mapping>
		  <filter-name>richfaces</filter-name>
		  <servlet-name>Faces Servlet</servlet-name>
		  <dispatcher>REQUEST</dispatcher>
		  <dispatcher>FORWARD</dispatcher>
		  <dispatcher>INCLUDE</dispatcher>
	 </filter-mapping>
	 
	 <!-- listener obrigatoria do spring-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
	 
	
	 
	<servlet>
		  <servlet-name>Faces Servlet</servlet-name>
		  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		  <load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		  <servlet-name>Faces Servlet</servlet-name>
		  <url-pattern>*.jsf</url-pattern>
	 </servlet-mapping>
	
	
	<welcome-file-list>
    	<welcome-file>index.html</welcome-file>
  	</welcome-file-list>	
	
</web-app>

talvez se vc atualizar os jars do jsf, talvez procurar se existe alguma atualização pro container q vc ta usando ...
a propria ide talvez(acho mto dificil)...

sei la :p

ps: o web.xml tem spring junto .. mas é so ignora tb :p

Criado 15 de março de 2009
Ultima resposta 16 de mar. de 2009
Respostas 1
Participantes 2