jsf:在passthrough <li>中呈现无效,它仍然呈现其输出</li>

时间:2014-09-05 13:35:47

标签: jsf primefaces jsf-2.2 passthrough-elements

我正在做一个页面,如果工作人员是管理员,将显示一些组件。

我正在使用html5和带有primefaces 5.0的bootstrap

根据我在JSF中的了解,您可以使用呈现的属性控制是否渲染组件。

由于我的组件是html5,我使用的是jsf:render。

对于我的代码,我使用了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'}"仍会呈现组件的输出?

1 个答案:

答案 0 :(得分:1)

那是因为<li>没有注册为现有的JSF组件。 JSF passthrough元素仅适用于具有等效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>

另见: