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