13

JavaServer Faces (JSF) を学び始めています。GlassFish 3+を使用しています。NetBeans で新しい JSF プロジェクトを作成し、プロジェクトを実行しました。問題なく動作しましたが、XHTML 出力を調べたところ、XML 宣言が残っていることに気付きました。これにより、DOCTYPE 宣言 (常にドキュメントの最初にあるはずです) が台無しになります。

ここに画像の説明を入力

JSF は XML 宣言を削除することになっているのでしょうか、それとも何か間違ったことをしたのでしょうか?

4

2 に答える 2

12

デフォルトでは、Facelets はコンポジション (インクルード ファイルと複合コンポーネント) とタグ ファイルからのみ削除します。マスター テンプレートからは削除されません。自分で取り除くだけです。HTML を作成するときは、XML プロローグをまったく使用しないでください。

XML プロローグがマスター テンプレートから削除されるかどうかは、JSF 2.2 仕様<facelets-processing>の付録 1.1.1.1 で指定されています。この付録では、 の要素の構成が説明されていますfaces-config.xml。XML プロローグは「処理命令」として記述されます。この表では、テンプレートが XML または JSPX ビューとして処理されるときにのみ削除 (消費) されることがわかります。

1.1.1.1facelets-processing要素

この<facelets-processing>要素は、Facelets VDL ファイルの処理に影響を与えるために使用されます。したがって、この設定は、およびエントリを介してランタイムに指定されているように、FaceletsViewDeclarationLanguage実装に到達する要求にのみ適用されます。この仕様では、Facelets ファイルの 3 つの処理モード (Facelets XHTML 構文、XML ビュー構文、および Facelets JSPX 構文) が定義されています。この最後の構文は、すでに JSP ドキュメント構文 (JSPX 構文とも呼ばれます) を使用しているアプリケーションの Facelets への移行を容易にすることを目的としています。これら 3 つのモードのそれぞれにおけるファイルの処理への影響を次の表に示します。javax.faces.FACELETS_VIEW_MAPPINGSjavax.faces.DEFAULT_SUFFIX <context-param>

Valid <process-as> values and their implications on the processing of Facelets.
-----------------------------------------------------------------------------------------
              <process-as>         <process-as>         <process-as>       <process-as>
              html5</process-as>   xhtml</process-as>   xml</process-as>   jspx</process-as>
              HTML 5 (default)     Facelets XHTML       XML View           Facelets JSPX
-----------------------------------------------------------------------------------------
XML Doctype   Simplified to        passed through       consumed           consumed
              <!DOCTYPE html>  

XML           passed through       passed through       consumed           consumed
declaration 

Processing    passed through       passed through       consumed           consumed
instructions

CDATA         passed through       passed through       consumed           consumed
section

Escaping of   escaped              escaped              escaped            not escaped
inline text    

XML           passed through       passed through       consumed           consumed
Comments 

前の表で、「パススルー」とは、コンテンツが変更されずにユーザー エージェントに渡されることを意味します。「消費」とは、コンテンツがサーバー上でサイレントに消費されることを意味します。CDATA セクションの場合、開始タグと終了タグを使用する必要がある場合でも、CDATA セクション自体の内容が渡されることに注意してください。「エスケープされた」とは、応答内の機密コンテンツが自動的にエスケープされることを意味します。たとえば、に&なります。&amp;「エスケープされていない」とは、そのようなコンテンツがエスケープされていないことを意味します。

つまり、HTML5/XHTML を作成している場合は、自分で削除する必要があります。実際には、より適切な言い回しがあります。HTML5 および XHTML ページに XML プロローグを自分で含めるべきではありません。これは必須ではないからです。XML および JSPX ページでのみ必要です (したがって、Facelets は自動的に削除します)

以下も参照してください。


具体的な問題とは関係ありませんが、リクエスト URL から独立する<h:outputStylesheet>のではなく、使用する必要があります。<link rel="stylesheet">

<h:outputStylesheet name="css/default.css" />
<h:outputStylesheet name="css/cssLayout.css" />

以下も参照してください。

于 2012-05-22T16:28:17.777 に答える
3

XML 宣言がレンダリングされたページに表示されないようにするために、.xhtml ファイルを XML として処理するように JSF を構成できることがわかりました。XML モードで処理すると、xml 宣言がソース ファイルから出力に渡されませんでした。この変更を行うことによるその他の副作用はまだ気づいていません。(しかし、何か見つけたら、ここでフォローアップします。)

構成を変更するために、faces-config.xml に以下を追加しました。

<faces-config-extension>
    <facelets-processing>
        <file-extension>.xhtml</file-extension>
        <process-as>xml</process-as>
    </facelets-processing>  
</faces-config-extension>    

お役に立てれば

于 2012-12-12T16:37:12.893 に答える