p:commandButton在调用ExternalContext#redirect()时不重定向

时间:2013-05-09 13:50:34

标签: jsf redirect primefaces commandbutton exceptionhandler

这是一个可以抛出异常的示例按钮:

<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错误页面。

这是如何引起的?如何解决?

1 个答案:

答案 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文件,小心地将正确的路径放到它上面)