J'utilise la couture 2.2, les primitives comme couche de présentation de la vue. Je voudrais écrire une sorte d'infrastructure afin de capturer toutes les exceptions. Par exemple i mettre dans un facelets suivant morceau de code:Exceptions centralisées Seam
<p:commandButton actionListener="#{mySeamController.aMethod()}"
dans la classe MySeamController, le procédé ci-dessus:
public void aMethod()
{
throw new NullPointerException();
}
dans le contrôleur i écrire une méthode:
@Observer("myapp.exceptions.exception")
public void onSystemException(Exception e)
{
System.out.println("a exception was occurred");
}
j'écris une classe pour attraper des exceptions:
@Scope(ScopeType.APPLICATION)
@BypassInterceptors
@Install(precedence = Install.MOCK, classDependencies = "javax.faces.context.FacesContext")
@Name("org.jboss.seam.exception.exceptions")
public class ExceptionHandler extends org.jboss.seam.exception.Exceptions{
private static final long serialVersionUID = 1L;
@Logger
Log log;
public void handle(Exception e) throws Exception
{
Events.instance().raiseEvent("myapp.exceptions.exception", e);
super.handle(e);
}
}
mais je l'ai remarqué quand je taht utilise un actionListener
<p:commandButton actionListener="#{mySeamController.aMethod()}"
au lieu d'une action
<p:commandButton action="#{mySeamController.aMethod()}"
aucune exception n'a été observée par classe ExceptionHandler. Pourquoi? Quelqu'un peut-il aider? Cordialement
Avez-vous déjà résolu ce problème? Ce n'est pas une solution, mais pour éviter des problèmes, jetez un oeil au code source de la classe Exceptions. Il déclenche des événements pour le lancement des exceptions, vous n'avez donc pas besoin de créer un gestionnaire intermédiaire: Events.instance(). RaiseEvent ("org.jboss.seam.exceptionNotHandled", e); Events.instance(). RaiseEvent ("org.jboss.seam.exceptionHandled", cause); Je l'utilise pour suivre les exceptions de sessions utilisateur (au moins les exceptions Seam). – gebuh