24

含まれているファイルに渡すこともできることを除いてui:decorate、機能的には同じです。ui:includeui:paramui:define

私は夢中ですか?

編集:実際ui:paramにはui:includeファイルに渡すこともできますが、私はすでにそれを行っていることがわかりました。たぶんあなたも合格することができui:defineます、私はここでチェックして編集します。

4

1 に答える 1

54

との主な違いは<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の複合コンポーネントでテンプレートを使用することは可能ですか?も参照してください。

于 2012-05-28T21:52:23.820 に答える