[ 
https://issues.apache.org/jira/browse/MYFACES-2641?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jakob Korherr resolved MYFACES-2641.
------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.0-beta-4

> Use the application's ViewHandler to create the view in FaceletViewMetadata
> ---------------------------------------------------------------------------
>
>                 Key: MYFACES-2641
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2641
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-3
>         Environment: MyFaces core trunk + Trinidad jsf2_ajax.3 branch
>            Reporter: Jakob Korherr
>            Assignee: Jakob Korherr
>             Fix For: 2.0.0-beta-4
>
>
> When the current VDL is FaceletViewDeclarationLanguage, the ViewMetadata impl 
> for facelets (FaceletViewMetadata) is used to create the view the following 
> way in RestoreViewExecutor:
> viewRoot = metadata.createMetadataView(facesContext);
> The method createMetadataView() then directly invokes createView() in the 
> surrounding class (FaceletViewDeclarationLanguage) to create the view. This 
> works for most cases, because normally when using FaceletViewMetadata as the 
> ViewMetadata impl, FaceletViewDeclarationLanguage will be the VDL and the 
> default ViewHandler implementation only redirects the call to createView() to 
> the right VDL.
> However in Trinidad's AJAX branch (jsf2_ajax.3) another ViewHandler 
> implementation is used 
> (org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl), which does 
> some work before calling createView() on the right VDL. This work is storing 
> the last modified date of the accessed file to discover any modifications of 
> it.
> If we now not call createView() on Trinidad's ViewHandler impl but directly 
> on the FaceletVDL, this work will not happen and the last modified date will 
> not be available for the next request. So the next request, which will be a 
> postback to this view, has no last modified information about the requested 
> view and thus it will throw a ViewExpiredException like this one:
> javax.faces.application.ViewExpiredException: /index.jspxNo saved view
> state could be found for the view identifier: /index.jspx
>        at 
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:114)
>        at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:138)
>        at 
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:88)
>        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
>        at 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
>        at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
>        at 
> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:247)
>        at 
> org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:157)
>        at 
> org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
>        at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>        at 
> org.apache.myfaces.trinidaddemo.webapp.RedirectFilter.doFilter(RedirectFilter.java:97)
>        at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>        at 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
>        at 
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>        at 
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
>        at 
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
>        at 
> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
>        at 
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>        at 
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>        at 
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>        at org.mortbay.jetty.Server.handle(Server.java:326)
>        at 
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
>        at 
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
>        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
>        at 
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>        at 
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> The related thread to this issue from the mailing list can be found here: 
> http://www.mail-archive.com/[email protected]/msg44985.html

-- 
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