jsf: рендеринг в passthrough <li> не имеет никакого эффекта, он все еще рендерит свой вывод
Я делаю страницу, которая покажет некоторые компоненты, если персонал является администратором.
Я использую HTML5 с начальной загрузкой с Primefaces 5.0
Основываясь на том, что я знаю в 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'}"
все еще выводит компонент?
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>
Смотрите также:
- Учебник по Java EE 7 - Использование проходных элементов - содержит таблицу, элементы которой имеют эквиваленты компонентов JSF