2

Java EE 6 アプリケーション サーバー (GlassFish v3) で Facelets を使用して JSF 2.0 を使用しています。web.xml で、例外のエラー ページを構成しました。

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error-all.xhtml</location>
</error-page>

これは/error-all.xhtmlテストページです:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                template="/resources/templates/decorator.xhtml">

    <ui:define name="title">Title</ui:define>

    <ui:define name="body">
        <h1>Body</h1>
    </ui:define>
</ui:composition>

commandLinks の 1 つをクリックすると、意図的に RuntimeException をスローするマネージド Bean を実装しました。その際、/error-all.xhtml ページの内容が表示されますが、Facelets による処理が取得されないため、template="/resources/templates/decorator.xhtml"は適用されません。

Google Chrome を使用すると、「タイトル」と「本文」のみが表示され、レイアウトは表示されません。Chrome に要素の検査を依頼すると、完全なソース コードが取得されます。このソース コードには、Chrome が明らかに理解できないui:compositionタグとui:defineタグが含まれています。これは、Facelets ページが処理されていないという私の理論を裏付けるものです。

それで、私の質問は、これを修正する方法ですか?エラー ページが処理され、テンプレートとエラー ページのコンテンツを組み合わせた結果である HTML コードを返すようにするにはどうすればよいですか?

4

2 に答える 2

5

FacesServletつまり、エラー ページの要求は?を通過していません。locationそのようにするには、それに応じてを更新する必要があります。

たとえば、 の が である場合、をurl-pattern" plain XHTML" ではなく になるように更新する必要があります。FacesServlet*.jsflocation/error-all.jsf/error-all.xhtml

于 2010-06-08T15:14:07.660 に答える
-2
 <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>


<error-page>
        <error-code>500</error-code>
        <location>/faces/error.xhtml</location>
</error-page>

そのようにしてみてください、それは私とうまくいきました。エラーページの場所の前にfacesサーブレットのURLパターンを置きます.error.xhtmlの代わりに/faces/error.xhtmlになります

于 2012-06-26T22:04:03.573 に答える