2010-11-15 7 views
6

estoy usando seam 2.2, Primefaces como ver la capa de presentación. Escribiría algún tipo de infraestructura para capturar todas las excepciones. Por ejemplo i puesto en una facelets siguiente fragmento de código:Seam excepciones centralizadas

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

en clase MySeamController, el método anterior:

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

en el controlador i escribir un método:

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

} 

escribo una clase para detectar excepciones:

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

} 
} 

pero me he dado cuenta de taht cuando se utiliza un actionListener

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

en lugar de una acción

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

no es una excepción se observó por clase ExceptionHandler. ¿Por qué? ¿Alguien puede ayudar? Saludos cordiales

+0

¿Alguna vez resolvió esto? Esta no es una solución, pero para ahorrarse algunos problemas, eche un vistazo al código fuente de la clase Exceptions. Levanta eventos para el lanzamiento de excepciones, por lo que no tiene que crear un controlador intermedio: Events.instance(). RaiseEvent ("org.jboss.seam.exceptionNotHandled", e); Events.instance(). RaiseEvent ("org.jboss.seam.exceptionHandled", causa); Lo uso para rastrear excepciones de sesión de usuario (al menos excepciones de costura). – gebuh

Respuesta

0

Crea un interceptor, y podrás capturar todo lo que necesites.