我正在做一个页面,如果工作人员是管理员,将显示一些组件。
我正在使用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'}"
仍会呈现组件的输出?
答案 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>