2008-09-23 14 views
2

Si mon code génère une exception, parfois - pas toujours - le fichier jsf présente une page blanche. J'utilise des facelets pour la mise en page. Une erreur similaire a été signalée à ce Sun forumn´s post, mais sans réponses. Toute autre personne ayant le même problème ou ayant une solution? ;)Page vierge dans JSF

En raison de certaines demandes. Suivent plus datails:

web.xml

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

Et la pile liée à jsf est imprimé après la véritable exception:

####<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> <[[email protected] - 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) 

Je utilise la version JSF Mojarra 1.2_09, et richfaces 3.2.1.GAfacelets 1.1.13.

espoir aide :(

+0

Pourriez-vous nous donner un peu plus de détails? Quelle implémentation utilisez-vous et comment votre système de gestion des erreurs est-il configuré? – sblundy

+0

J'ai réédité ce problème. S'il vous plaît, jetez un oeil. ;) – paulosuzart

Répondre

2

Je pense que cela dépend en grande partie de votre mise en œuvre du JSF. Je l'ai entendu dire que certains vont rendre des écrans vides.

Celui que nous utilisions jetterait erreur 500 est avec une pile D'autres fois, les boutons ne fonctionneraient pas sans aucune erreur pour l'utilisateur.Cela fut tout au long de notre phase de développement

Mais le meilleur conseil que je peux vous donner est d'attraper les exceptions et de les enregistrer dans un journal des erreurs. vous avez la trace de la pile pour le débogage plus tard.Pour les messages que nous ne pouvions rien faire à propos de comme un backend échou Il suffit d'ajouter un message fatal au FacesContext qui s'affiche à l'écran et de consigner la trace de la pile.

+0

Merci pour la réponse. En fait, c'est triste. Bonne recommandation que nous suivons déjà, mais le problème continue. Le point est exactement attraper quoi que ce soit pour éviter ce comportement. :( Merci beaucoup – paulosuzart

+0

bien que j'ai vu dans mon application où la page était parfois vide.la cause a été trouvée comme trop de fichiers étaient ouverts dans mon application dans les activités bg et les flux de fichiers ne sont pas fermés à certains endroits – Inv3r53

1

J'ai corrigé un problème similaire dans ma page error.jsp aujourd'hui. Ce ne sera pas exactement la même chose que la vôtre, mais cela pourrait indiquer à quelqu'un de la bonne direction s'il a un problème similaire. Mon problème semblait provenir de deux sources différentes.

D'abord, la propriété d'exception message n'était pas définie dans certaines des servlets qui lançaient des exceptions interceptées par la page d'erreur. Les servlets interceptaient et renvoyaient des exceptions à l'aide du constructeur ServletException(Throwable rootCause). Deuxièmement, dans la page d'erreur elle-même, l'auteur d'origine avait utilisé le code de scriptlet pour analyser le message en utilisant String.split(message, ";"); Comme le message était null, cela a échoué. Je recevais un NullPointerException dans mon journal des erreurs, avec le message "Un problème est survenu lors de la diffusion de la page d'erreur".

Ces deux choses combinées pour me donner une page vierge à l'URL de la servlet qui lançait l'exception d'origine. J'ai corrigé mon problème en fournissant mon propre message d'erreur lorsque je remets des exceptions dans mes servlets en utilisant le constructeur ServletException(String message, Throwable rootCause), donc le message d'erreur ne sera plus null. J'ai également réécrit la page error.jsp en utilisant EL au lieu du code scriptlet, mais ce n'était pas strictement nécessaire.

+0

Nice! Merci homme – paulosuzart

-1

Pour une page vierge sur JSF 2, placez un point d'arrêt dans ExceptionHandlerWrapper.handle ou une classe remplaçant cette méthode. Dans mon cas, c'était dû au code personnalisé qui était trop restrictif et l'erreur n'était pas enregistrée.

+0

Son 1.2.09, pas JSF 2. – Gimby

+0

J'ai écrit ceci pour les gens qui débarquent ici après une recherche, en 2012, ils peuvent utiliser JSF 2. C'est pourquoi j'ai précisé qu'il s'applique à JSF 2. Mais de toute façon merci pour le downvote ... –