Frage

Wenn mein Code eine Ausnahme auslöst, manchmal - nicht immer - die JSF präsentiert eine leere Seite. Ich bin facelets für Layout. Ein ähnlicher Fehler wurden bei diesem Sun forumn's Post , aber ohne Antworten . Noch jemand mit dem gleichen Problem, oder hat eine Lösung? ;)

Aufgrund einiger Anfragen. Hier folgen weitere datails:

web.xml

 <error-page>
        <exception-type>com.company.ApplicationResourceException</exception-type>
        <location>/error.faces</location>
 </error-page>

Und der Stapel in Bezug auf JSF nach der wirklichen Ausnahme gedruckt:

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[weblogic.servlet.internal.WebAppServletContext@6d46b9 - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page.
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144)
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

Ich bin mit der JSF-Version Mojarra 1.2_09, richfaces 3.2.1.GA und facelets 1.1.13.

Hoffnung etwas Hilfe: (

War es hilfreich?

Lösung

ich denke, das weitgehend auf Ihrer JSF Implementierung abhängt. Ich habe gehört, dass einige leere Bildschirme übertragen werden.

Der, den wir Fehler 500 ist mit einem Stack-Trace werfen wurden unter Verwendung würde. Andere Zeiten heraus Tasten nicht für den Benutzer ohne Fehler arbeiten. Das war alles während unserer Entwicklungsphase.

Aber der beste Rat, den ich Ihnen geben kann, ist die Ausnahmen zu fangen und sie in einem Fehlerprotokoll einzuloggen, damit Sie den Stack-Trace haben später für das Debuggen. Für Nachrichten, die wir nichts über wie ein Backend tun könnten andernfalls würden wir nur eine fatale Botschaft an die Faces hinzufügen, die auf dem Bildschirm und melden Sie sich den Stack-Trace angezeigt werden.

Andere Tipps

Ich reparierte ein ähnliches Problem in meinem error.jsp heute. Dies wird nicht genau das gleiche wie Sie, aber es könnte jemand in der richtigen Richtung weist, wenn sie ein ähnliches Problem haben. Mein Problem schien aus zwei verschiedenen Quellen zu kommen.

Als erstes wurde die message Ausnahme Eigenschaft nicht in einige der Servlets festgelegt werden, die gefangenen Ausnahmen von der Fehlerseite wurde zu werfen. Die Servlets wurden Fang- und Erneutes Auslösen von Ausnahmen mit der ServletException(Throwable rootCause) Konstruktor.

Zweitens in der Fehlerseite selbst, hatte der ursprüngliche Autor scriptlet Code verwendet, um die Nachricht mit String.split(message, ";"); zu analysieren Da die Nachricht dieser fehlgeschlagen null wurde. Ich war einen NullPointerException in meinem Fehlerprotokoll bekommen, zusammen mit der Meldung „Problem aufgetreten, während der Fehlerseite dient.“

Diese beiden Dinge kombiniert mich an der URL des Servlets eine leere Seite zu geben, der die ursprüngliche Ausnahme warf. Ich reparierte mein Problem durch meine eigene Fehlermeldung bereitstellt, wenn ich Ausnahmen in meiner Servlets mit dem ServletException(String message, Throwable rootCause) Konstruktor, so dass die Fehlermeldung nicht mehr null werden. Ich schrieb auch die error.jsp Seite mit EL statt scriptlet Code, aber das war nicht unbedingt notwendig.

Für eine leere Seite auf JSF 2, legen Sie einen Haltepunkt in ExceptionHandlerWrapper.handle oder eine Klasse überschreibt diese Methode. In meinem Fall war es wegen des kundenspezifischen Code, der eine zu restriktiv und der Fehler war nicht angemeldet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top