sto usando seam 2.2, primefaces come livello di presentazione della vista. Scriverei una specie di infrastruttura per catturare tutte le eccezioni. Per esempio ho messo in una facelets seguente porzione di codice:Seam eccezioni centralizzate
<p:commandButton actionListener="#{mySeamController.aMethod()}"
in classe MySeamController, il metodo di cui sopra:
public void aMethod()
{
throw new NullPointerException();
}
nel controllore scrivo un metodo:
@Observer("myapp.exceptions.exception")
public void onSystemException(Exception e)
{
System.out.println("a exception was occurred");
}
scrivo una classe per rilevare le eccezioni:
@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);
}
}
ma ho notato taht quando uso un ActionListener
<p:commandButton actionListener="#{mySeamController.aMethod()}"
invece di un'azione
<p:commandButton action="#{mySeamController.aMethod()}"
non fa eccezione è stata osservata per classe ExceptionHandler. Perché? Qualcuno può aiutare? Cordiali saluti
Hai mai risolto questo? Questa non è una soluzione, ma per risparmiarti qualche problema, dai un'occhiata al codice sorgente della classe Exceptions. Solleva gli eventi per il lancio delle eccezioni, quindi non è necessario creare un gestore intermedio: Events.instance(). RaiseEvent ("org.jboss.seam.exceptionNotHandled", e); Events.instance(). RaiseEvent ("org.jboss.seam.exceptionHandled", causa); Lo uso per tenere traccia delle eccezioni delle sessioni utente (almeno le eccezioni Seam). – gebuh