myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Heinen <mhn4...@googlemail.com>
Subject Re: ViewExpiredException with valid session
Date Thu, 09 Aug 2012 12:58:03 GMT
Do you have multiple forms on your page?

Am 09.08.2012 14:11, schrieb Jarosław Szczepankiewicz:
> Hi,
>
> I have a big (for me) problem with primefaces / myfaces.
> Server: tomcat 7, myfaces: 2.1.2, jdk 7, primefaces 3.3.1
>
> I have simple managed bean with @ViewScope. I have an edit form. I access the form with
GET parameter:
> /be/cms/article.faces?id=3
>
> which is used to load the Article from DB. Form shows ok and is in session (i observer
session id and it does not change). Then I click submit button. I get:
> -----------------
>     [java] DEBUG [SessionTimeoutPhaseListener.java] beforePhase: RESTORE_VIEW(1)
>       [java] DEBUG [SessionTimeoutPhaseListener.java] NO session timeout detected...
>       [java] DEBUG [SessionTimeoutPhaseListener.java] afterPhase: RESTORE_VIEW(1)
> javax.faces.application.ViewExpiredException: /be/cms/article.facesNo saved view state
could be found for the view identifier: /be/cms/article.faces
>       [java] 	at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128)
~[myfaces-impl-2.1.2.jar:2.1.2]
>       [java] 	at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
[myfaces-impl-2.1.2.jar:2.1.2]
>       [java] 	at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[myfaces-impl-2.1.2.jar:2.1.2]
>       [java] 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) [myfaces-api-2.1.2.jar:2.1.2]
>       [java] 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
[tomee-catalina-4.0.0-beta-2.jar:4.0.0-beta-2]
>       [java] 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
[catalina.jar:7.0.26]
>       [java] 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
[tomcat-coyote.jar:7.0.26]
>       [java] 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
[tomcat-coyote.jar:7.0.26]
>       [java] 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
[tomcat-coyote.jar:7.0.26]
>       [java] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_03]
>       [java] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_03]
>       [java] 	at java.lang.Thread.run(Unknown Source) [na:1.7.0_03]
> -------------------
> SessionTimeoutPhaseListener is my class that implements PhaseListener, strange thing
is that phase listener shows that the exception is probably after RESTORE_VIEW :(.
>
> The session is not timed out. I have org.apache.myfaces.VALIDATE = true.
>   ID of the session does not change. I have observed the PostConstruct entrance but no
PreDestroy on my bean so probably my bean still lives and is ready to be bound to the view,
but can not force the view to be restored.
>   I have used the following options:
>
> 1. facelets.BUILD_BEFORE_RESTORE = TRUE, does not matter
> 2. javax.faces.STATE_SAVING_METHOD = client or server, does not matter
> 3. changing AJAX to FALSE and using direct access does not matter
>
> The post does
> I have lost almost all my hairs. I will appreciate any help & advice. , thanks in
advance
>
> Sources:
> article.xhtml
> ------------------------------------------------------
> <html xmlns="http://www.w3.org/1999/xhtml"
> 	xmlns:ui="http://java.sun.com/jsf/facelets"
> 	xmlns:h="http://java.sun.com/jsf/html"
> 	xmlns:f="http://java.sun.com/jsf/core"
> 	xmlns:p="http://primefaces.org/ui">
>
> <f:metadata>
> 	<f:viewParam name="id" value="#{articleEditBean.entryId}" required="true"
> 		requiredMessage="No entry specified.">
>
> 		<f:validateLongRange minimum="1" />
> 	</f:viewParam>
>
> 	<f:event type="preRenderView" listener="#{articleEditBean.loadEntry}" />
> </f:metadata>
>
> <h:head>
> 	<title>Artykul edycja</title>
> </h:head>
>
> <body>
> 	<ui:decorate template="/templates/masterDecorator.xhtml">
> 		<p:panel header="Edytuj artykul">
>
> 			<h:panelGrid columns="2" cellpadding="5">
>
> 				<p:outputLabel for="articleName" value="Nazwa" />
> 				<p:inputText id="articleName" value="#{articleEditBean.article.name}"  required="true"/>
>
> 				<p:outputLabel for="articleDescription" value="Opis" />
> 				<p:inputTextarea id="articleDescription" rows="5" cols="120"
> 					counter="counter" maxlength="4096"
> 					value="#{articleEditBean.article.description}"
> 					counterTemplate="{0} znakow pozostalo." autoResize="false" />
>
> 				<h:outputText value="" />
> 				<h:outputText id="counter" />
> 				<p:outputLabel for="articleContent" value="Tresc" />
> 				<p:editor id="articleContent" value="#{articleEditBean.article.content}"
> 					width="600"/>
>
> 			</h:panelGrid>
> 		</p:panel>
> 		<p>
> 			<p:commandButton value="Save" id="ajax" ajax="false" actionListener="#{articleEditBean.listenSaveArticle}"
> 				action="#{articleEditBean.saveArticle}" icon="ui-icon-disk" />
> 		</p>
>
>
> 	</ui:decorate>
> </body>
> </html>
> ------------------------------------------------------
>
> ArticleEditBean.java
> ------------------------------------------------------
> @ViewScoped
> @ManagedBean
> public class ArticleEditBean implements Serializable{
>
> 	/**
> 	 *
> 	 */
> 	private static final long serialVersionUID = -679841341548988167L;
>
> 	private Article article;
> 	public Long getEntryId() {
> 		logger.debug("getEntryId: {}", entryId);
> 		return entryId;
> 	}
>
> 	public void setEntryId(Long entryId) {
> 		logger.debug("setEntryId: {} ",entryId);
> 		this.entryId = entryId;
> 	}
>
> 	public Article getArticle() {
> 		logger.debug("getArticle(): {}", article);
> 		return article;
> 	}
>
> 	private Long entryId;
> 	
> 	@EJB
> 	private ArticleService service;
> 	
> 	private static Logger logger = LoggerFactory.getLogger(ArticleEditBean.class);
> 	
> 	public void loadEntry() {
> 		logger.debug("entering articleBean.loadEntry");
> 		FacesContext ctx = FacesContext.getCurrentInstance();
> 		if (ctx.isValidationFailed()) {
> 			ctx.getApplication()
> 					.getNavigationHandler()
> 					.handleNavigation(ctx, "#{articleBean.loadEntry}",
> 							"invalid");
> 			return;
> 		}
>
> 		article = service.read(entryId);
>
> 		if (article == null) {
>
> 			ctx.getApplication()
> 					.getNavigationHandler()
> 					.handleNavigation(ctx, "#{articleBean.loadEntry}",
> 							"invalid");
> 		}
>
> 		
> 	}
> 	
> 	public void listenSaveArticle(ActionEvent e){
> 		logger.debug("before listenSaveArticle... ");
> 		FacesContext context = FacesContext.getCurrentInstance();
> 		Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
> 		
> 		logger.debug("end of listenSaveArticle");
> 		
> 	}
> 	@PreDestroy
> 	public void preDestroy(){
> 		logger.debug("pre destroy");
> 	}
> 	
> 	@PostConstruct
>      public void init() {
>          logger.debug("in post construct");
>          
>      }
>
> 	public String saveArticle() {
> 		logger.debug("entering articleEditBean.saveArticle()");
> 		if (article.getId() != null) {
> 			service.update(article);
> 		} else {
> 			service.create(article);
> 		}
>
> 		addMessage("Article " + article.getId() + " saved");
> 		logger.debug("exiting articleEditBean.saveArticle()");
> 		return "/be/welcome.xhtml?faces-redirect=true";
> 	}
>
> 	private void addMessage(String message) {
> 		Flash flash = FacesContext.getCurrentInstance().getExternalContext()
> 				.getFlash();
> 		flash.setKeepMessages(true);
> 		flash.setRedirect(true);
> 		FacesContext.getCurrentInstance().addMessage(null,
> 				new FacesMessage(message));
> 	}
>
> 	public void setArticle(Article article) {
> 		logger.debug("setArticle(): {}", article);
> 		this.article = article;
> 	}
> ------------------------------------------------------
>
>



Mime
View raw message