[ 
https://issues.apache.org/jira/browse/MYFACES-1957?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12634253#action_12634253
 ] 

Nick Belaevski commented on MYFACES-1957:
-----------------------------------------

I've removed RichFaces at all, and another problem occurs: old view is still 
processed (it is taken from request) while the request URI has changed to error 
page. Set state saving to client to see the problem.

 

> ViewExpiredException when transferred to error page declared in web.xml
> -----------------------------------------------------------------------
>
>                 Key: MYFACES-1957
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1957
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 1.2.2
>         Environment:           RichFaces 3.1.4 GA, MyFaces 1.2.2, Facelets 
> 1.1.14, Tomcat 6 
>            Reporter: Fabien Gaujous
>
> Hello,
> When a backing bean throws an Exception (HibernateException in our case), 
> instead of being redirected to the error page declared in web.xml, we end up 
> with the default Tomcat 500 error page.
> This is due to a a ViewExpiredException that is triggered while the system 
> attempts to perform the Restore View JSF phase for the page with view id 
> "/500.xhtml".
> Here is the stack trace from the Tomcat log:
> at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> at java.lang.Thread.run(Thread.java:613)
> Sep 5, 2008 4:58:00 PM org.apache.catalina.core.ApplicationDispatcher invoke
> SEVERE: Servlet.service() for servlet HWFacesServlet threw exception
> javax.faces.application.ViewExpiredException: /500.xhtmlThe expected view was 
> not returned for the view identifier: /500.xhtml
> at 
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:88)
> at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
> at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
> at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
> at 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
> at 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
> at 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
> at 
> org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:424)
> at 
> org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:343)
> at 
> org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:287)
> at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
> at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> at java.lang.Thread.run(Thread.java:613)
> Sep 5, 2008 4:58:00 PM org.apache.catalina.core.StandardHostValve custom
> SEVERE: Exception Processing ErrorPage[errorCode=500, 
> location=/faces/500.xhtml]
> javax.servlet.ServletException: /500.xhtmlThe expected view was not returned 
> for the view identifier: /500.xhtml
> at 
> javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:401)
> at 
> javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:221)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:156)
> at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
> at 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
> at 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
> at 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
> at 
> org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:424)
> at 
> org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:343)
> at 
> org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:287)
> at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
> at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> at java.lang.Thread.run(Thread.java:613)
> Caused by: javax.faces.application.ViewExpiredException: /500.xhtmlThe 
> expected view was not returned for the view identifier: /500.xhtml
> at 
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:88)
> at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
> at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
> ... 17 more
> Our web.xml is as follows:
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <web-app
>     xmlns="http://java.sun.com/xml/ns/j2ee";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
> http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";
>     version="2.4">
>   <display-name>App</display-name>
>   <context-param>
>     <param-name>facelets.VIEW_MAPPINGS</param-name>
>     <param-value>*.xhtml</param-value>
>   </context-param>
>   <context-param>
>     <param-name>facelets.LIBRARIES</param-name>
>     <param-value>/WEB-INF/tags/kpu/kpu.taglib.xml</param-value>
>   </context-param>
>   <context-param>
>     <param-name>facelets.DEVELOPMENT</param-name>
>     <param-value>false</param-value>
>   </context-param>
>   <context-param>
>     <param-name>facelets.REFRESH_PERIOD</param-name>
>     <param-value>-1</param-value>
>   </context-param>
>   <context-param>
>     <param-name>facelets.SKIP_COMMENTS</param-name>
>     <param-value>false</param-value>
>   </context-param>
>   <context-param>
>     
> <description>http://wiki.apache.org/myfaces/RedirectTracker&lt;/description>
>     <param-name>org.apache.myfaces.redirectTracker.POLICY</param-name>
>     
> <param-value>org.apache.myfaces.custom.redirectTracker.policy.FullRedirectTrackPolicy</param-value>
>   </context-param>
>   <context-param>
>     <param-name>org.apache.myfaces.RENDER_VIEWSTATE_ID</param-name>
>     <param-value>false</param-value>
>   </context-param>
>   <context-param>
>     <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
>     <param-value>false</param-value>
>   </context-param>
>   <listener>
>     
> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
>   </listener>
>   <listener>
>     
> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>   </listener>
>   <listener>
>     
> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
>   </listener>
>   <filter>
>     <description>This filter is the Ajax4JSF</description>
>     <display-name>Ajax4jsf Filter</display-name>
>     <filter-name>ajax4jsf</filter-name>
>     <filter-class>org.ajax4jsf.Filter</filter-class>
>   </filter>
>   <filter>
>     <description>This is the MyFaces extension</description>
>     <filter-name>extensionsFilter</filter-name>
>     
> <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
>     <init-param>
>       <param-name>uploadMaxFileSize</param-name>
>       <param-value>500k</param-value>
>     </init-param>
>     <init-param>
>       <param-name>uploadThresholdSize</param-name>
>       <param-value>1k</param-value>
>     </init-param>
>   </filter>
>   <filter-mapping>
>     <filter-name>extensionsFilter</filter-name>
>     <url-pattern>/faces/*</url-pattern>
>   </filter-mapping>
>   <filter-mapping>
>     <filter-name>extensionsFilter</filter-name>
>     <servlet-name>HWFacesServlet</servlet-name>
>   </filter-mapping>
>   <filter-mapping>
>     <filter-name>ajax4jsf</filter-name>
>     <servlet-name>HWFacesServlet</servlet-name>
>     <dispatcher>REQUEST</dispatcher>
>     <dispatcher>FORWARD</dispatcher>
>     <dispatcher>INCLUDE</dispatcher>
>   </filter-mapping>
>   <servlet>
>     <servlet-name>HWFacesServlet</servlet-name>
>     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>     <load-on-startup>2</load-on-startup>
>   </servlet>
>   <servlet-mapping>
>     <servlet-name>HWFacesServlet</servlet-name>
>     <url-pattern>/faces/*</url-pattern>
>   </servlet-mapping>
>   <!-- Error page handling -->
>   <error-page>
>     <error-code>500</error-code>
>     <location>/faces/500.xhtml</location>
>   </error-page>
> </web-app>
> Here is what we found from our investigation.
> When submitting a login form from page "/login.xhtml", our code triggers a 
> HibernateException. This generates a 500 error.
> Then, in org.apache.myfaces.lifecycle.RestoreViewExecutor#execute, when 
> reaching the Restore View JSF phase for view id "/500.xhtml", 
> restoreViewSupport.isPostback(facesContext) is true, and thus, thinking this 
> is a postback situation (which is weird as we are moving to a different page, 
> the error one), the system attempts to restore a viewroot using the current 
> view state.
> The problem is, there is no existing view state in the session for view id 
> "/500.xhtml" -- there is only state for the page we are coming from and which 
> triggered the HibernateException, "/login.xhtml" (the view state is searched 
> / computed in org.ajax4jsf.application.AjaxStateManager#restoreView). So the 
> viewRoot returned by viewHandler.restoreView(facesContext, viewId) is null, 
> and a ViewExpiredException is thrown. The default Tomcat error page is then 
> shown.
> // Determine if this request is a postback or initial request
> if (restoreViewSupport.isPostback(facesContext))
> {
>     if (log.isTraceEnabled())
>         log.trace("Request is a postback");
>     viewRoot = viewHandler.restoreView(facesContext, viewId);
>     if (viewRoot == null)
>     {
>         throw new ViewExpiredException("The expected view was not returned " 
> + "for the view identifier: "
>                 + viewId, viewId);
>     }
>     restoreViewSupport.processComponentBinding(facesContext, viewRoot);
> }
> else
> {
>   ...
> } 
> The problem may be caused by the fact that the system thinks, while moving to 
> the error page, that a postback is underway. This does not seem correct. I 
> would imagine the error page management would rather forward the flow to the 
> error page. That would be an initial view, not a postback.
> In any case, many thanks to anyone that can help us on this so we can get our 
> error page to display correctly.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to