我正在使用seam 2.2,primefaces作为视图表示层。 我会写一些基础设施来捕获所有异常。 例如,我按照一段代码放入了一个facelets:
<p:commandButton actionListener="#{mySeamController.aMethod()}"
在MySeamController类中,上面的方法:
public void aMethod()
{
throw new NullPointerException();
}
在控制器中我写了一个方法:
@Observer("myapp.exceptions.exception")
public void onSystemException(Exception e)
{
System.out.println("a exception was occurred");
}
我写了一个类来捕捉异常:
@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);
}
}
但是当我使用actionListener
时我注意到了<p:commandButton actionListener="#{mySeamController.aMethod()}"
而不是动作
<p:commandButton action="#{mySeamController.aMethod()}"
ExceptionHandler类没有观察到任何异常。 为什么?有人可以帮忙吗? 最好的问候
答案 0 :(得分:0)
创建一个拦截器,你可以捕获任何你需要的东西。