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
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