【问题标题】:Seam centralized exceptions接缝集中异常
【发布时间】: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


【解决方案1】:

创建一个拦截器,你可以捕获任何你需要的东西。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2011-03-20
    • 2011-06-14
    • 2012-01-24
    相关资源
    最近更新 更多