我在使用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上的一個錯誤?
在此先感謝。
OK! 我正在使用jspx文件,但視圖處理程序_is_ facelets。 我不知道爲什麼「errorPage.jsf」映射可以與非ajax請求正常工作,但是無法通過ajax請求。 –
將errorPage.jspx重命名爲errorPage.xhtml。 謝謝@BususC。 只需提及,錯誤頁面上的CSS必須超出標記才能正確顯示ajax請求上的錯誤頁面。 –
是的古斯塔沃。錯誤頁面的頭部無法正確呈現給瀏覽器。 FullAjaxExceptionHandler似乎使用/保留髮生錯誤的頁面的頭部。 – Gandalf