2010-10-22 4 views
2

Cette question est peut-être trop ambiguë, mais je recherche de l'aide ou des conseils sur la gestion des exceptions dans une application JavaServer Faces.Gestion des exceptions dans une application JSF

À l'heure actuelle, chaque fois que j'attrape une exception, je l'enregistre, puis lance une autre exception que j'ai créée, par exemple MyCustomException. Cette exception personnalisée prend l'objet Throwable qui a été intercepté et m'envoie la trace de la pile par courrier électronique pour que je sache qu'une exception s'est produite. Pour l'instant, cela semble fonctionner pour moi jusqu'à la notification d'une exception.

Cependant, le problème que j'ai est de savoir comment présenter à l'utilisateur une jolie page d'erreur qui leur permet de savoir que quelque chose s'est mal passé et que j'ai été informé de l'erreur. Faire quelques recherches, je suis tombé sur plusieurs articles qui montrent comment rediriger un utilisateur vers une autre page en utilisant quelque chose de semblable à ce qui suit:

FacesContext context = FacesContext.getCurrentInstance(); 
ExternalContext extContext = context.getExternalContext(); 

String url = extContext.encodeActionURL(extContext.getRequestContextPath() + 
    "/messages.faces"); 

extContext.redirect(url); 

Mais cela semble être un peu à copier et coller au fond pour chaque pris l'exception, qui ne suit pas exactement le principe DRY. À la fin, je pense que ce que je voudrais faire est d'avoir un email envoyé à chaque fois qu'une exception se produit et ensuite être en mesure d'envoyer un message à une page d'erreur générique qui affiche ensuite le message à l'utilisateur.

Des idées ou des bonnes pratiques que je devrais suivre? Merci d'avance pour tout conseil que vous pouvez donner! Je suis perplexe.

Remarque: Si cela aide, j'utilise JSF 2.0 et Facelets.

Répondre

4

Ce urls pourrait vous être utile:

http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2

http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/

http://download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/api/javax/faces/context/ExceptionHandler.html

Fondamentalement, vous devez utiliser une nouvelle fonctionnalité dans JSF2.0, ExceptionHandler. C'est un point central pour gérer une exception inattendue. Vous pouvez indiquer quelle page utiliser pour chaque type d'exception.

1

Vous devrez utiliser quelque chose comme un filtre de servlet pour intercepter (et gérer) l'exception. De cette façon, il n'y a qu'un seul bloc catch global :-)

C'est, vous mapper un filtre autour du FacesServlet qui fait:

try { 
    chain.proceed(request, response); 
} catch (Exception e) { 
    // handle the exception 
} 

Votre implémentation de JSF pourrait aussi avoir la notion d'une page d'erreur . Si c'est le cas, vous devrez peut-être désactiver la page d'erreur pour que l'exception atteigne le filtre. Vous pouvez trouver http://javaboutique.internet.com/tutorials/Servlet_Filters/ utile.