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>

Смотрите также:

Другие вопросы по тегам