Как пользоватьсятег внутритег - PullRequest
4 голосов
/ 18 октября 2011

Я хочу использовать тег <f:loadBundle> на мой взгляд.Я знаю, что могу объявить это внутри faces-config.xml, но по какой-то причине я хочу использовать это на мой взгляд.Я использую тег таким образом, но он не работает.Я использую его внутри тега <ui:composition>.

<h:head>
    <title>Email Content</title>
</h:head>
<h:body>
    <ui:composition template="./WEB-INF/templates/layout.xhtml">
        <ui:define name="content">
            <f:loadBundle basename="presentationBeans.homepage.messages" var="msgs"/>
            <h:form id="emailContent_Review" >
                <p:growl id="growl" showDetail="true" />
                <p:panel id="panel"  
                    header="#{msgs.ECR_panelHeader}" 
                    style="border-color: #000000;width: 960px;position: absolute;left: 150px;height: 370px" >
                    <p:dataTable value="#{emailContent_Review.emailContent}"
                        var="emailContent"
                        selection="#{emailContent_Review.selectedEmailContent}"
                        emptyMessage="#{msgs.ECR_tableEmptyMessage}" 
                        widgetVar="portalsTable"
                        rows="8" height="350" paginator="true">
                        <f:facet name="header" >
                        </f:facet>
                    </p:dataTable>
                </p:panel>
            </h:form>
        </ui:define>
    </ui:composition>
</h:body>

Что я делаю не так?Также я прочитал, что

Чтобы использовать шаблон, вы используете тег «ui: состав» с атрибутом «шаблон».Facelets удаляет все теги вне тега - то есть объявление doctype, html, head, title и body теги.Это необходимо, поскольку <ui:composition> заменяется шаблоном, который содержит собственный набор тегов html, head, title и body.

Если я хочу использовать файл свойств в разделе headтогда как я могу это использовать?Потому что головной раздел находится вне тега <ui:composition>.Я хочу сказать, что если я хочу сделать это

<h:head>
    <title>#{msgs.indexWindowTitle}</title>
</h:head>

, то как я могу использовать свой файл свойств за пределами <ui:composition>?

Ответы [ 2 ]

5 голосов
/ 18 октября 2011

Это действительно не сработает.Измените основной шаблон layout.xhtml, чтобы заменить заголовок заполнителем вставки шаблона:

<h:head>
    <title><ui:insert name="title">Default title</ui:insert></title>
</h:head>

Затем измените клиент шаблона, чтобы определить его:

<ui:composition template="./WEB-INF/templates/layout.xhtml">
    <ui:define name="title">
        <f:loadBundle basename="presentationBeans.homepage.messages" var="msgs"/>
        #{msgs.indexWindowTitle}
    </ui:define>
    <ui:define name="content">
        ...
    </ui:define>
</ui:composition>

Обратите внимание, что вы этого не делаетенужно повторить <f:loadBundle> для <ui:define name="content">.

0 голосов
/ 21 января 2014

Я наткнулся на подход, который хорошо работает для меня на Mojarra 2.1.x, возможно, сделаю это.Настройка @ BalusC, например:

<ui:composition>
    <f:loadBundle basename="presentationBeans.homepage.messages" var="msgs"/>

    <ui:decorate template="./WEB-INF/templates/layout.xhtml">
        <ui:define name="title">
            #{msgs.indexWindowTitle}
        </ui:define>
        <ui:define name="content">
            ...
        </ui:define>
    </ui:decorate>
</ui:composition>

Мой подход к вложению шаблонного интерфейса ui: decorate в мои пустые теги ui: Composition хорошо подходит для меня, потому что я часто хочу объявить один тег f: loadBundle, который используется всемимоего вложенного пользовательского интерфейса: define's.Однако я не уверен, какие дополнительные махинации я заставляю делать ядро, когда делаю это, или использую неполную реализацию спецификации, чтобы получить то, что я хочу.YMMV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...