当<p:ajax>从<p:tree> </p:tree> </p:ajax>中抛出异常时,Omnifaces FullAjaxExceptionHandlerFactory不起作用

时间:2015-03-30 14:55:41

标签: ajax primefaces exception-handling tree omnifaces

我有以下代码:

<p:tree value="#{blockTreeBean.tarifRoot}" var="node" dynamic="true"
            selectionMode="single"
            selection="#{blockTreeBean.selectedNode}">
   <p:ajax event="select" onstart="thePanel.openPanel();"
                update=":tarmedDetailViewer, @this"
                listener="#{blockTreeBean.onNodeSelect}"
                oncomplete="javascriptfunction()"/>
   ...
</p:tree>

在更新tarmedDetailViewer期间,EL表达式抛出NullPointerException,我希望得到一个500错误的页面。相反,我会记录错误,并且不会呈现包含异常的内容。异常将在事件的xhtml中抛出:

<f:event type="preRenderComponent" listener="#{bean.initDto}"/>

如果在非ajax请求中抛出NullPointer,则错误页面有效。如果onNodeSelect方法直接抛出NullPointerException,它就可以工作。如果在以下上下文中抛出空指针,它也可以工作:

<p:commandButton value="hi!" id="ajaxbutton" icon="icon-arrow" ajax="true"
                                         action="#{bean.badmethod}"/>

我的faces-config.xml包含:

<factory>
    <exception-handler-factory>
        org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
    </exception-handler-factory>
</factory>

我的web.xml包含:

<error-page>
    <error-code>500</error-code>
    <location>/error-500.jsf</location>
</error-page>

二手版本:

  • Omnifaces:1.5
  • primefaces:5.1
  • Tomcat 8.0.15
  • 升级到JSF Mojarra 2.2.10(在JSF Mojarra 2.1.2之前)

更新: xhtml部分中的任何异常都会产生此行为,而不仅仅是标记f:event。

0 个答案:

没有答案