含まれているファイルに渡すこともできることを除いてui:decorate
、機能的には同じです。ui:include
ui:param
ui:define
私は夢中ですか?
編集:実際ui:param
にはui:include
ファイルに渡すこともできますが、私はすでにそれを行っていることがわかりました。たぶんあなたも合格することができui:define
ます、私はここでチェックして編集します。
との主な違いは<ui:include>
、<ui:decorate>
は<ui:decorate>
ユーザー定義のテンプレートコンポーネントの挿入を可能にすることを目的としているのに対し、<ui:include>
は既存の事前定義されたテンプレートを含めることを目的としていることです。
これは確かに、本体でユーザー定義のテンプレートコンポーネントを<ui:decorate>
サポートし、テンプレート内の場所に挿入できることを意味します。<ui:define>
<ui:insert>
これは、どこで使用できるかを示すための-やや不器用な-例です。
/WEB-INF/templates/field.xhtml
<ui:composition
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"
>
<h:outputLabel for="#{id}" value="#{label}" />
<ui:insert name="input" />
<h:message id="#{id}_message" for="#{id}" />
</ui:composition>
/page.xhtml
<h:panelGrid columns="3">
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Foo" />
<ui:param name="id" value="foo" />
<ui:define name="input">
<h:inputText id="foo" value="#{bean.foo}" required="true" />
</ui:define>
</ui:decorate>
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Bar" />
<ui:param name="id" value="bar" />
<ui:define name="input">
<h:selectBooleanCheckbox id="bar" value="#{bean.bar}" required="true" />
</ui:define>
</ui:decorate>
...
</h:panelGrid>
パネルグリッドの各セルでコンポーネントが適切にレンダリングされることに注意してください。繰り返しますが、この特定の例はかなり不器用です。代わりにタグファイルを使用しただけです。ヘッダーやフッターなどをカスタマイズできるフォーム全体など、より大きなセクションである場合にのみ、<ui:decorate>
適切でした。
のもう1つの大きな利点は<ui:decorate>
、テンプレートで複合コンポーネントを使用できることです。JSF 2の複合コンポーネントでテンプレートを使用することは可能ですか?も参照してください。