It's necessary to have a slow internet connection to reproduce this, so I
can't test locally. While the page is loading the user hits a command
button. As the page is still loading, I guess the view state is not created
yet, so viewHandler.restoreView(facesContext, viewId) returns null.

Thanks for the suggestion. I'll give it try, but according to the component
documentation, using it for this case feels more like a workaround than a
solution, so I'd like to see if there are more options.


2014-04-09 14:48 GMT-03:00 Howard W. Smith, Jr. <smithh032...@gmail.com>:

> Wow, you're using Shiro.
>
> Would be nice to have a list of steps how you duplicate this in your app,
> definitely and always.
>
> I definitely suggest you use OmniFaces restore view component to avoid this
> exception.
>  On Apr 9, 2014 1:41 PM, "Felipe Jaekel" <fkjae...@gmail.com> wrote:
>
> > I'm getting view expired exceptions if the user tries to perform an
> action
> > in a page that isn't fully loaded.
> >
> > javax.faces.application.ViewExpiredException: /page/plano/plano.jsfNo
> > saved view state could be found for the view identifier:
> > /page/plano/plano.jsf
> >         at
> >
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:181)
> >
> >
> > Looking at RestoreViewExceutor source code we have this:
> >
> >
> >                     if (facesContext.getResponseComplete())
> >                     {
> >                         // If the view handler cannot restore the view
> > and the response
> >                         // is complete, it can be an error or some
> > logic in restoreView.
> >                         return true;
> >                     }
> >                     else
> >                     {
> >                         // If the return from
> > ViewHandler.restoreView() is null, throw a ViewExpiredException with
> > an
> >                         // appropriate error message.
> >                         throw new ViewExpiredException("No saved view
> > state could be found for the view identifier: " + viewId, viewId);
> >                     }
> >                 }
> >
> >
> > Page hasn't fully loaded yet, so facesContext.getResponseComplete() is
> > returning false, but isn't there a way to avoid this? Page gets unusable
> > after the VEE is thrown.
> >
> >
> > Thanks in advance,
> >
> > Phillip
> >
> >
> > Full stackTrace:
> >
> > javax.faces.application.ViewExpiredException: /page/plano/plano.jsfNo
> > saved view state could be found for the view identifier:
> > /page/plano/plano.jsf
> >         at
> >
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:181)
> >         at
> >
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
> >         at
> >
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
> >         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >         at
> >
> org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >         at
> > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >         at
> >
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
> >         at
> >
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> >         at
> >
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> >         at
> >
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> >         at
> >
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> >         at
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
> >         at
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
> >         at
> >
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
> >         at
> >
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
> >         at
> >
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
> >         at
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
> >         at
> >
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> >         at
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >         at
> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
> >         at
> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> >         at
> >
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
> >         at
> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> >         at
> >
> com.googlecode.psiprobe.Tomcat70AgentValve.invoke(Tomcat70AgentValve.java:38)
> >         at
> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> >         at
> > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
> >         at
> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> >         at
> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
> >         at
> >
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
> >         at
> >
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
> >         at
> >
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
> >         at
> >
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> >         at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> >         at java.lang.Thread.run(Thread.java:744)
> >
>

Reply via email to