javax.Gesichter.- Anwendung.ViewExpiredException scheinbar ignoriert
Habe ich Folgendes in meine web.xml:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/expiredIndex.jsf</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsf</location>
</error-page>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
Wenn ich meine app, und warten Sie 1 minute, wenn ich dann Versuch mit ihm zu interagieren (JSF 1.2, h:commandButton
) bekomme ich die Fehlermeldung
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/index.jsf - View /index.jsf could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:103)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Kann mir jemand sagen, warum es die javax.faces.application.ViewExpiredException
ist nicht abgeholt wird? Ich bin auf der Suche nach den grundlegenden Ablauf-setup möglich und das ist wohl alles, was notwendig ist in die web-descriptor.
Dank
BEARBEITEN
Ich habe jetzt in meinem web.xml die folgenden:
<filter>
<filter-name>Error</filter-name>
<filter-class>myClient.ErrorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Error</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<error-page>
<exception-type>javax.servlet.ViewExpiredException</exception-type>
<location>/expiredIndex.jsf</location>
</error-page>
(diese Einträge sind die letzten filter-Einträge in der web.xml) und einen neuen filter mit der doFilter Methode wie beschrieben in diese post. Was sollte da jetzt passiert, ist die rootCause
sollten wickeln Sie das ViewExpiredException, die sollten so leiten Sie den Benutzer auf meine expiredIndex
Seite, wenn der servlet-Sitzungs-Timeout. Stattdessen bekomme ich einen 500. Ich kann nicht sehen, was ich tun müssen, die richtige Umleitung in dieser situation. Hilfe!!!
EDIT 2
Fehler aus der 500 ist:
javax.faces.application.ViewExpiredException: viewId:/index.jsf - View /index.jsf could not be restored.
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:103)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
prismClient.ErrorFilter.doFilter(Unknown Source)
ich glaube, das ist der standard.
InformationsquelleAutor volvox | 2011-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil die
ViewExpiredException
-wie jede andereFacesException
- ist unter der Decke gewickelt, in eineServletException
. Dieser ist benutzt worden, um zu finden, entspricht der erklärten Fehler-Seiten. Das nächste match istjava.lang.Throwable
- und somit die damit verbundenen Fehler-Seite wird gezeigt.Wenn keine übereinstimmung gefunden worden wären, dann ist die Ursache des
ServletException
gewesen wäre, ausgepackt, und einen zweiten Durchgang durch den erklärten Fehler-Seiten mit den ausgepackten Ausnahme. Wenn Sie entfernen diejava.lang.Throwable
Eintritt, wirst du sehen, dass dies funktionieren wird.Wenn Sie möchten, um die
java.lang.Throwable
, dann am besten was Sie tun können, ist das erstellen einerFilter
die packt jederFacesException
von derServletException
und rethrows.Siehe auch:
ViewExpiredException
und mehrere Fehler-Seite DefinitionenDu bist herzlich willkommen.
Ich habe bearbeitet meine Frage, wie ich einem anderen Punkt, zu Fragen. Nochmals vielen Dank für Ihre Eingabe.
Man dachte, dass hier vielleicht - sollte-ich-nicht-ausdrücklich die Besetzung der rootCause werfen als ViewExpiredException statt einer RuntimeException, um es sperren, um es nach unten oder ist das keine gute Idee?
Ah ich sehe es, den voll qualifizierten Namen der
ViewExpiredException
im<exception-type>
ist falsch. Es solltejavax.faces.application.ViewExpiredException
als in Ihrem ursprünglichen Erklärung und nichtjavax.servlet.ViewExpiredException
wie in der aktualisierten Erklärung. Das falsche existiert überhaupt nicht.InformationsquelleAutor BalusC
Bitte sehen Sie sich den blog gepostet, die auf ähnlichen Problem hier: es ist weniger umständlich und sehr effektiv. Werden Sie sicher, dass Sie Ihre "anzeigen-handler" - tags innerhalb der "Anwendung" - tags, dies zu tun hat bei mir, cheers.
Mehrere Quellen sind ebenfalls eine gute Idee. Wenn der blog hat sich verändert, haben Sie eine professionelle backup-Quelle
InformationsquelleAutor user6745578