jsf:传递时渲染 无效,它仍呈现其输出

问题描述 投票:1回答:1

我正在制作一个页面,如果Staff是管理员,它将显示一些组件。

我正在使用带有primefaces 5.0的引导程序的html5

基于我在JSF中了解的知识,您可以通过使用rendered属性来控制是否渲染组件。

由于我的组件位于html5中,所以我改用jsf:rendered。

对于我的代码,我使用了jsf:rendered="#{staffBean.staff.accountStatus =='ADMIN'}",并且staffBean.staff.accountStatus中的值不是ADMIN。

我在下面附加了部分代码。

<li class="active" jsf:rendered="#{staffBean.staff.accountStatus =='ADMIN'}">
    <a href="index.html"><i class="fa fa-user"></i> <span class="nav-label">Account Management</span> <span class="fa arrow"></span></a>
    <ul class="nav nav-second-level">
        <li class="active"><a href="createStaff.xhtml">Create Staff</a></li>
        <li><a href="removeStaff.xhtml">Delete Staff</a></li>
        <li><a href="updateStaff.xhtml">Update Staff</a></li>
    </ul>
</li>

关于为什么我的jsf:rendered="#{staffBean.staff.accountStatus =='ADMIN'}"仍然呈现组件输出的任何想法?

jsf primefaces jsf-2.2 passthrough-elements
1个回答
1
投票

这是因为<li>没有在任何地方注册为现有的JSF组件。 JSF直通元素仅适用于也具有等效JSF组件的元素,例如<form><input><a>等(具有<h:form><h:inputText><h:xxxLink>等效项)。它们就是“隐藏”转换为真正的JSF组件。

最好使用<ui:fragment>

<ui:fragment rendered="#{staffBean.staff.accountStatus eq 'ADMIN'}">
    <li class="active">
        ...
    </li>
</ui:fragment>

另请参见:

© www.soinside.com 2019 - 2024. All rights reserved.