2014-01-22 56 views
1

我在使用Omnifaces的ajax請求上遇到FullAjaxExceptionHandler問題。FullAjaxExceptionHandler不會重定向到全局錯誤頁面1.7

  • 環境:
  • 的Tomcat 7.0.50
  • 鑽嘴魚科2.1.27
  • Omnifaces 1.7

我宣佈我的web.xml中的錯誤頁面:

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error/errorPage.jsf</location> 
</error-page> 
<filter> 
    <filter-name>facesExceptionFilter</filter-name> 
    <filter-class>org.omnifaces.filter.FacesExceptionFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>facesExceptionFilter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

我在faces-config.xml中聲明瞭異常處理程序

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

使用此環境時,在非ajax請求上的@PostConstruct方法上拋出異常時,錯誤頁面會正確顯示。 當我在ajax請求上拋出異常時,錯誤頁面不顯示,但我看到了這條日誌消息。

FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/error/errorPage.jsf' will be shown. 

過了一會兒,我看到另一條日誌消息,瀏覽器打開「硬編碼錯誤頁面」。

FullAjaxExceptionHandler: Well, another exception occurred during rendering error page '/error/erroPage.jsf'. Trying to render a hardcoded error page now. 
javax.faces.FacesException: org.apache.jasper.JasperException: /error/errorPage.jspx (line: 11, column: 39) Attribute "xmlns:h" must be declared for element type "html". 

看來,JSP正在嘗試呈現JSF頁面。 如果我改變錯誤頁聲明:

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error/errorPage.jspx</location> 
</error-page> 

Ajax請求重定向正確到我的網頁,但非Ajax請求已不重定向到錯誤頁面。

那麼,這是一個配置問題,環境問題還是Omnifaces上的一個錯誤?

在此先感謝。

回答

1

showcase page

請注意,錯誤頁面必須是一個有效的Facelets頁面! JSP不受支持。

javadoc

這異常處理程序將解析web.xml和網絡fragment.xml之文件中查找所有聲明的具體異常類型的HTTP錯誤代碼500的錯誤頁面的位置和。這些位置需要指向Facelets文件(不支持JSP)。

該從JSP轉換到Facelets了。無論如何,JSP自2009年起就被棄用了。它適用於JSPX擴展,因爲它可以被解析,就好像它是一個Facelets文件(它也是基於XML的)。 OK!

+0

OK! 我正在使用jspx文件,但視圖處理程序_is_ facelets。 我不知道爲什麼「errorPage.jsf」映射可以與非ajax請求正常工作,但是無法通過ajax請求。 –

+0

將errorPage.jspx重命名爲errorPage.xhtml。 謝謝@BususC。 只需提及,錯誤頁面上的CSS必須超出標記才能正確顯示ajax請求上的錯誤頁面。 –

+0

是的古斯塔沃。錯誤頁面的頭部無法正確呈現給瀏覽器。 FullAjaxExceptionHandler似乎使用/保留髮生錯誤的頁面的頭部。 – Gandalf

相關問題