我有以下代码:
<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>
二手版本:
更新: xhtml部分中的任何异常都会产生此行为,而不仅仅是标记f:event。