JSFアプリケーションをブックマーク可能なページに変換することで多くの進歩を遂げましたが、それを正しい方法で行っているかどうか疑問に思っています。 1つの質問は、f:metadataタグのベストプラクティスの場所があるかどうかです。
私の典型的なFaceletsクライアントページは次のようになります。
<ui:composition template="./pattern.xhtml">
<ui:define name="content">
<f:metadata>
<f:viewParam name="userId" value="#{bean.userId}" />
<f:viewParam name="startRecord" value="#{bean.startRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
<f:viewParam name="sort" value="#{bean.sort}" />
</f:metadata>
<h1>Data Table</h1>
etc
したがって、f:metadataおよび子f:viewParamタグが私のページの本文で検出されます。私のpattern.xhtmlテンプレートには、これらのタグをヘッダーセクションに配置できるセクション(「header」という名前)もあります。それらはそこに置かれるべきですか?それは違いを生むのでしょうか、それとも私はまだ見たことがないいくつかの副作用のために準備されていますか?
技術的には、トップレベルビューにある限り、ビューのどこで<f:metadata>
を宣言するかは重要ではありません(したがって、テンプレートを使用する場合は、テンプレートクライアントで、したがってマスターテンプレートではありません)。ビューが構築されると、メタデータは基本的にJSFコンポーネントツリーの一部ではなく、ビュールートの一部になります(ビューごとに ViewDeclarationLanguage#getViewMetadata()
で取得できます)。 。
ほとんどの自己文書化は、ビューの上部に<f:metadata>
を配置することです。これにより、ビューのソースコードの途中または下部にスクロールしなくても、メタデータを一目で確認できます。
プレーンページを使用する場合は、<h:head>
の直前に配置してください。
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
>
<f:metadata>
<f:viewParam name="userId" value="#{bean.userId}" />
<f:viewParam name="startRecord" value="#{bean.startRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
<f:viewParam name="sort" value="#{bean.sort}" />
</f:metadata>
<h:head>
...
</h:head>
<h:body>
...
</h:body>
</html>
テンプレートを使用する場合、 <f:metadata>
タグのドキュメント に記載されているように、推奨されるアプローチは、マスターテンプレートで個別の<ui:insert name="metadata">
を宣言し、クライアントに<f:metadata>
で<ui:define name="metadata">
を定義させることです。
<ui:composition template="/WEB-INF/pattern.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
>
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="userId" value="#{bean.userId}" />
<f:viewParam name="startRecord" value="#{bean.startRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
<f:viewParam name="sort" value="#{bean.sort}" />
</f:metadata>
</ui:define>
<ui:define name="content">
<h1>Data Table</h1>
...
</ui:define>
</ui:composition>