1

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

我正在使用带有 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'}"仍然呈现组件的输出的任何想法?

4

1 回答 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>

也可以看看:

于 2014-09-05T13:54:21.507 回答