1

Omnifaces を使用した ajax リクエストで FullAjaxExceptionHandler に問題があります。

  • 環境:
  • トムキャット 7.0.50
  • モハラ 2.1.27
  • オムニフェイス 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 のバグですか?

前もって感謝します。

4

1 に答える 1