这是一个可以抛出异常的示例按钮:
<h:commandButton value="save" update=":formTable:tableData">
<f:setPropertyActionListener value="BTN_ONE"
target="#{tamplateTableBean.buttonSelected}" />
</h:commandButton>
在ExceptionHandler
我有:
FacesContext.getCurrentInstance().getExternalContext().redirect("error.xhtml");
当我使用<h:commandButton>
(如上例所示)并发生异常时,将执行重定向并显示错误页面。
当我使用<p:commandButton>
时,则不会发生重定向(即使执行了行redirect("error.xhtml")
),它将保持在同一页面上,就好像什么也没发生一样。我的ExceptionHandler
中捕获了异常,但未显示JSF错误页面。
这是如何引起的?如何解决?
答案 0 :(得分:1)
如链接iIn BalusC评论中所述 - Omnifaces解决了这个问题。我删除了我的ExcetionHandler实现并更改为Omnifaces - &gt;与在docs中一样,我导入omnifaces.jar,添加到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>/faces/restricted/error.xhtml</location>
</error-page>
现在我在Ajax请求中捕获异常并重定向到错误页面。 (提示:error.xhtml是facelet文件,小心地将正确的路径放到它上面)