2010-11-15 7 views
6

Ich benutze Naht 2.2, Primefaces als Ansicht Präsentationsschicht. Ich würde irgendeine Art von Infrastruktur schreiben, um alle Ausnahmen zu erfassen. Zum Beispiel setzen I in einem Facelets folgenden Code:Seam zentralisierte Ausnahmen

<p:commandButton actionListener="#{mySeamController.aMethod()}" 

in MySeamController Klasse, das obige Verfahren:

public void aMethod() 
{ 
    throw new NullPointerException(); 
} 

in dem Controller zu schreiben ich eine Methode:

@Observer("myapp.exceptions.exception") 
public void onSystemException(Exception e) 
{ 
    System.out.println("a exception was occurred"); 

} 

Ich schreibe eine Klasse, um Ausnahmen zu fangen:

@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); 

} 
} 

aber ich habe taht bemerkt, wenn ich eine Action verwenden

<p:commandButton actionListener="#{mySeamController.aMethod()}" 

statt eine Aktion

<p:commandButton action="#{mySeamController.aMethod()}" 

keine Ausnahme von Exception Klasse beobachtet wurde. Warum? Kann jemand helfen? Mit freundlichen Grüßen

+0

Haben Sie das jemals gelöst? Dies ist keine Lösung, aber um sich Ärger zu ersparen, werfen Sie einen Blick auf den Quellcode der Exceptions-Klasse. Es löst Ereignisse für die Ausnahmen throw aus, sodass Sie keinen Zwischenhandler erstellen müssen: Events.instance(). RaiseEvent ("org.jboss.seam.exceptionNotHandled", e); Events.instance(). RaiseEvent ("org.jboss.seam.exceptionHandled", cause); Ich verwende dies, um Benutzersitzungsausnahmen zu verfolgen (mindestens Nahtausnahmen). – gebuh

Antwort

0

Erstellen Sie einen Interceptor, und Sie werden alles fangen können, was Sie brauchen.