myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kito Mann <kito.m...@virtua.com>
Subject Re: ViewExpiredException with valid session
Date Thu, 09 Aug 2012 12:21:35 GMT
Helo Jaroslaw,

Does this happen the _very_ first time you click on the button, even when
ajax is set to false for the button?
___

Kito D. Mann | @kito99 | Author, JSF in Action
Virtua, Inc. | http://www.virtua.com | JSF/Java EE training and consulting
http://www.JSFCentral.com - JavaServer Faces FAQ, news, and info |
@jsfcentral
+1 203-404-4848 x246

* Listen to the latest headlines in the JSF and Java EE newscast: *
http://blogs.jsfcentral.com/JSFNewscast/*
* Sign up for the JSFCentral Newsletter: http://oi.vresp.com/?fid=ac048d0e17



On Thu, Aug 9, 2012 at 8:11 AM, Jarosław Szczepankiewicz <
jarrman@poczta.onet.pl> wrote:

> 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message