Параметризация пользовательского тега facelet - PullRequest
3 голосов
/ 02 февраля 2012

Я создал шаблон лицевой стороны:

левый right.xhtml

<ui:composition>
    <ui:include name="left" />
    <hr />
    <ui:include name="right" />
</ui:composition>

После, если я использую этот шаблон с ui: decorate , он отлично работает:

index.xhtml

<ui:decorate template="left-right.xhtml">
    <ui:define name="left">FOO</ui:define>
    <ui:define name="right">BAR</ui:define>
</ui:decorate>

НО, если я использую этот шаблон в качестве пользовательского тега facelet, он не работает.

заказ taglib.xml

<facelet-taglib>
    <tag>
        <tag-name>leftright</tag-name>
        <source>left-right.xhtml</source>
    </tag>
</facelet-taglib>

index.xhtml

<custom:leftright>
    <ui:define name="left">FOO</ui:define>
    <ui:define name="right">BAR</ui:define>
</custom:leftright>

Содержимое внутри ui: define теги не включены в шаблон: (

Итак, вопрос в том, как я могу параметризовать шаблон Facelet, если он отображается как пользовательский тег Facelet?

1 Ответ

4 голосов
/ 02 февраля 2012

(обратите внимание, что у вас есть синтаксическая ошибка в вашем left-right.xhtml, вы должны использовать <ui:insert> вместо <ui:include>, но я буду считать это просто небрежным упрощением)

Файл тега не может рассматриваться как клиент шаблона.Вам нужно подходить к этому по-разному в зависимости от конкретных функциональных требований.Если вы используете JSF 2.x, то составной компонент будет самым близким, что вам нужно.Вы можете определить детали как <f:facet> и отобразить их как <cc:renderFacet> в составной реализации.

Например

/resources/custom/leftRight.xhtml

<cc:interface>
    <cc:facet name="left" required="true" />
    <cc:facet name="right" required="true" />
</cc:interface>
<cc:implementation>
    <cc:renderFacet name="left" />
    <hr />
    <cc:renderFacet name="right" />
</cc:implementation>

Использование:

<custom:leftRight>
    <f:facet name="left">FOO</f:facet>
    <f:facet name="right">FOO</f:facet>
</custom:leftRight>

Но если вы все еще используете JSF 1.x, вы не можете создать составной компонент.Вам нужно придерживаться <ui:decorate>.

См. Также:

...