簡體   English   中英

為什么在ui:composition中未呈現ui:fragement

[英]Why is ui:fragement not rendered inside ui:composition

我是JSF和Java的初學者,請保持友好!

如果用戶是管理員,我正在嘗試呈現特定的塊。

我有一個模板。 如果用戶已登錄,則此模板可以正確呈現特定的塊。

admin.xhtml:

    <ui:composition template="../../WEB-INF/tpl/admin/template.xhtml">
        <ui:define name="sectionTitle">Admin</ui:define>

        <!-- Logged as Admin -->
        <ui:fragment rendered="#{user.admin}">
            <ui:define name="body">
                <h3>Welcome</h3>
                <p>Please choose an administration task!</p>
            </ui:define>
        </ui:fragment>

    </ui:composition>

template.xhtml:

<div class="header">
    <h2>
        <ui:insert name="sectionTitle"> Default Section Title</ui:insert>
    </h2>
    <ui:insert name="logBox">
        <ui:fragment rendered="#{not user.logged}">
            <ui:include src="login.xhtml"></ui:include>
        </ui:fragment>

        <ui:fragment rendered="#{user.logged}">
            <h:form>
                <h:commandButton value="Logout"
                    action="#{userService.logout}" />
            </h:form>
        </ui:fragment>
    </ui:insert>
</div>

    <div class="corebody">
        <ui:insert name="body"> Default Section Content</ui:insert>
    </div>

我可以像這樣在模板內移動渲染的塊:

<ui:fragment rendered="#{user.admin}">
        <ui:insert name="body"> Default Section Content</ui:insert>
</ui:fragment>

但是對於每個文件的責任性,這似乎對我來說並不可行(這似乎並不通用,為什么要在模板中包含此類內容?)。

我是否真的缺少明顯的東西?

在構建視圖期間, <ui:define><ui:composition>都將被忽略 ,並且最終不會出現在JSF組件樹中。

您需要將<ui:fragment>放在<ui:define>

<ui:composition template="../../WEB-INF/tpl/admin/template.xhtml">
    <ui:define name="sectionTitle">Admin</ui:define>

    <!-- Logged as Admin -->
    <ui:define name="body">
        <ui:fragment rendered="#{user.admin}">
            <h3>Welcome</h3>
            <p>Please choose an administration task!</p>
        </ui:fragment>
    </ui:define>

</ui:composition>

一種替代方法是使用JSTL <c:if> ,因為它已在視圖構建期間運行:

<ui:composition template="../../WEB-INF/tpl/admin/template.xhtml">
    <ui:define name="sectionTitle">Admin</ui:define>

    <!-- Logged as Admin -->
    <c:if test="#{user.admin}">
        <ui:define name="body">
            <h3>Welcome</h3>
            <p>Please choose an administration task!</p>
        </ui:define>
    </c:if>

</ui:composition>

也可以看看:

<ui:composition template="../../WEB-INF/tpl/admin/template.xhtml">
    <ui:define name="sectionTitle">

        <!-- Logged as Admin -->
        <ui:fragment rendered="#{user.admin}">
            <ui:define name="body">
                 <h3>Welcome</h3>
                 <p>Please choose an administration task!</p>
            </ui:define>
        </ui:fragment>
    </ui:define>
</ui:composition>

嘗試這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM