【发布时间】:2011-05-10 11:52:13
【问题描述】:
我正在使用 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 类没有观察到异常。 为什么?任何人都可以帮忙吗? 最好的问候
【问题讨论】:
-
你解决过这个问题吗?这不是一个解决方案,但为了省点麻烦,请查看 Exceptions 类的源代码。它引发异常抛出的事件,因此您不必创建中间处理程序:Events.instance().raiseEvent("org.jboss.seam.exceptionNotHandled", e); Events.instance().raiseEvent("org.jboss.seam.exceptionHandled", 原因);我用它来跟踪用户会话异常(至少是 Seam 异常)。
标签: java exception-handling seam