我正在制作一个页面,如果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'}"
仍然呈现组件输出的任何想法?
这是因为<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>