Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 JSF中未捕获的异常处理_Jsf 2_Exception Handling - Fatal编程技术网

Jsf 2 JSF中未捕获的异常处理

Jsf 2 JSF中未捕获的异常处理,jsf-2,exception-handling,Jsf 2,Exception Handling,我正在尝试创建一个过滤器来处理异常(请参阅) 我执行以下方法: <p:commandButton value="Dispatch Order" update="@form" action="#{orderBean.dispatchOrder()}"> </p:commandButton> 我做错了什么?这个老问题是针对JSF 1.x的,当您发送JSF 2.x ajax请求时,答案不适用。只有在将ajax=“false”添加到或使用标准JS

我正在尝试创建一个过滤器来处理异常(请参阅)

我执行以下方法:

    <p:commandButton value="Dispatch Order" update="@form"
        action="#{orderBean.dispatchOrder()}">
    </p:commandButton>

我做错了什么?

这个老问题是针对JSF 1.x的,当您发送JSF 2.x ajax请求时,答案不适用。只有在将
ajax=“false”
添加到
或使用标准JSF
而不使用
时,才会调用过滤器。为了处理ajax请求上的异常,您需要一个自定义

另见:

这不是JSF2.0中的最佳实践。相反,请看:

现在,正如您可能会在评论中看到的那样,焊锡/接缝3背后的一些人建议改为使用接缝捕捉。Seam Catch实际上使用了相同的原理,但使用的方式更加精细。当然,这是CDI方式,考虑到JSF2bean的预弃用警告,您应该使用CDI imo

Seam Catch已经移植到Deltaspike核心,但是JSF集成没有达到0.4的要求,所以您必须自己实现,然后在Deltaspike中实现后可以替换实现。吉拉:

Seam Catch的源代码将带您走得很远。但您应该像这样掌握BeanManager:

    BeanManager beanManager = BeanManagerProvider.getInstance()
            .getBeanManager();

    beanManager.fireEvent(catchEvent);
以下是您需要执行的操作的摘要:

  • 去CDI
  • 将Deltaspike核心添加到类路径
  • 根据Seam的源代码和我发布的修改,实现您自己的ExceptionHandler等
  • 利润!!!现在,您可以使用Deltaspike中的异常控制以非常平滑的方式捕获未捕获的异常。有关如何实现捕获的详细信息,请参见此处:

  • 编辑:BalusC的建议是一个很好的轻量候选,它也有这样的味道:

    我得到了这个错误。web.xml或web-fragment.xml中需要HTTP 500或java.lang.Throwable错误页。两个都没有找到。我像showcase一样为java.lang.RuntimeException设置了错误页面。这是预期的吗?您指的是
    FullAjaxExceptionHandler
    ?只需在
    web.xml
    中设置HTTP 500或
    java.lang.Throwable
    错误页面。另请参见其。是否可以在此处添加对OmniFaces的引用?
    May 21, 2013 6:04:32 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
    WARNING: #{orderBean.dispatchOrder()}: MyException.....
    
        BeanManager beanManager = BeanManagerProvider.getInstance()
                .getBeanManager();
    
        beanManager.fireEvent(catchEvent);