Hallo,
um das übliche Problem (siehe z.B. Beitrag1 oder Beitrag2, [EDIT]mögl. andere Ursache auch Beitrag3) einer ViewExpiredException zu handhaben, welches entsteht
1. nach einem Logout (session.invalidate()),
2. dem Laden einer vorherigen Seite aus dem Cache mittels Back-button des Browsers und
3. anschließendem Reload
möchte ich diesen Fehler mittels error-page Konfiguration in der web.xml umleiten. Es wird jedoch nur eine leere Seite angezeigt.
Die Fehlerseite wird dann angezeigt, wenn ich (absichtlich) eine (NullPointer)Exception in einem getter eines Feldes erzeugt, welches auf der Zielseite angezeigt werden soll (es wird also eine Seite geladen und auf dieser Seite ist das Feld eingebunden, dessen getter eine Exception erzeugt).
Entsteht dieselbe Exception aber in einer Methode, ohne daß das Ziel der Navigation bereits bestimmt wurde, wird laut server.log zwar die (NullPointer)Exception geworfen, aber die Fehlerseite wird nicht angezeigt. Das Monitoring des glassfish zeigt einen "500 Internal Server error" an. Doch auch auf die 500.html - Seite wird nicht navigiert. Diese befindet sich auch im Verzeichnis errorpages und enthält nur html-Code.
Wo liegt der Fehler? Wo kann ich hierüber etwas nachlesen?
Die web.xml sieht wie folgt aus:
[XML][...]
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/faces/errorpages/exception.xhtml</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errorpages/500.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errorpages/404.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/errorpages/403.html</location>
</error-page>
</web-app>[/XML]
exception.xhtml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>#{msgs.errorTitle} - EXCEPTION</title>
</h:head>
<h:body>
<h:form>
<h:graphicImage library="images" name="error.png" style="float: left;"/>
<p>#{msgs.errorOccurred}</p>
<p>#{msgs.errorCopyReport}</p>
<h:inputTextarea value="#{error.stackTrace}" rows="40" cols="80"
readonly="true"/>
</h:form>
</h:body>
</html>[/XML]
Die (künstlich erzeugte) Exception wird im server.log folgendermaßen angezeigt:
Die eigentliche Exception (siehe ganz oben und 1., 2., 3.), welche ich dann letztlich auch noch abfangen möchte, sieht wie folgt aus:
Gruß,
Raphalon
um das übliche Problem (siehe z.B. Beitrag1 oder Beitrag2, [EDIT]mögl. andere Ursache auch Beitrag3) einer ViewExpiredException zu handhaben, welches entsteht
1. nach einem Logout (session.invalidate()),
2. dem Laden einer vorherigen Seite aus dem Cache mittels Back-button des Browsers und
3. anschließendem Reload
möchte ich diesen Fehler mittels error-page Konfiguration in der web.xml umleiten. Es wird jedoch nur eine leere Seite angezeigt.
Die Fehlerseite wird dann angezeigt, wenn ich (absichtlich) eine (NullPointer)Exception in einem getter eines Feldes erzeugt, welches auf der Zielseite angezeigt werden soll (es wird also eine Seite geladen und auf dieser Seite ist das Feld eingebunden, dessen getter eine Exception erzeugt).
Entsteht dieselbe Exception aber in einer Methode, ohne daß das Ziel der Navigation bereits bestimmt wurde, wird laut server.log zwar die (NullPointer)Exception geworfen, aber die Fehlerseite wird nicht angezeigt. Das Monitoring des glassfish zeigt einen "500 Internal Server error" an. Doch auch auf die 500.html - Seite wird nicht navigiert. Diese befindet sich auch im Verzeichnis errorpages und enthält nur html-Code.
Wo liegt der Fehler? Wo kann ich hierüber etwas nachlesen?
Die web.xml sieht wie folgt aus:
[XML][...]
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/faces/errorpages/exception.xhtml</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errorpages/500.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errorpages/404.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/errorpages/403.html</location>
</error-page>
</web-app>[/XML]
exception.xhtml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>#{msgs.errorTitle} - EXCEPTION</title>
</h:head>
<h:body>
<h:form>
<h:graphicImage library="images" name="error.png" style="float: left;"/>
<p>#{msgs.errorOccurred}</p>
<p>#{msgs.errorCopyReport}</p>
<h:inputTextarea value="#{error.stackTrace}" rows="40" cols="80"
readonly="true"/>
</h:form>
</h:body>
</html>[/XML]
Die (künstlich erzeugte) Exception wird im server.log folgendermaßen angezeigt:
Code:
[#|2011-08-10T14:11:36.096+0200|WARNING|oracle-glassfish3.1|javax.enterprise.resource.webcontainer.jsf.lifecycle|_ThreadID=21;_ThreadName=Thread-1;|#{user.login}: java.lang.NullPointerException
javax.faces.FacesException: #{user.login}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[...]
Code:
[#|2011-08-10T14:14:53.052+0200|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=35;_ThreadName=Thread-1;|StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/login.xhtml - Ansicht /login.xhtml konnte nicht wiederhergestellt werden.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:202)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
[...]
Raphalon
Zuletzt bearbeitet: