2013-07-19 4 views
1

Я использую шаблон для отображения выпадающего меню на всех моих страницах. Я хочу отображать только те пункты меню, которым разрешен доступ определенного пользователя.Как получить идентификатор компонента для рендеринга

<rich:menuGroup label="Items" id="item" rendered="#{user.allowed"> 
    <rich:menuItem label="Find" action="searchItems"/> 
    <rich:menuItem label="Create" action="newItem"/> 
</rich:menuGroup> 
<rich:menuGroup label="Groups" id="group" rendered="#{user.allowed"> 
    <rich:menuItem label="Find" action="searchGroup"/> 
    <rich:menuItem label="Create" action="newGroup"/> 
</rich:menuGroup> 

allowed() разработан как универсальный метод. Он называет

String id = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getId(); 

Чтобы получить идентификатор компонента, чтобы он мог решить, следует ли отображать элемент.

К сожалению, возвращенный идентификатор не относится к группе меню; вместо этого это контейнер, который содержит menuGroup. Поскольку это контейнер-контейнер, этот компонент имеет список своих дочерних элементов, а в этом списке находится компонент с идентификатором «item». Моя проблема заключается в том, что я не могу понять, к какому ребенку вызывается метод «разрешен», т. Е. Этот элемент, «элемент» или один из других дочерних элементов в списке. Есть ли способ спросить родительский контейнер, на который вызывается дочерний элемент «allowed()»?

ответ

2

Почему бы вам не передать идентификатор непосредственно в bean?

<rich:menuGroup label="Groups" id="group" rendered="#{user.isAllowed('group')}"> 
+0

вздох. потому что я попробовал это один раз, и это не сработало. моя путаница заключалась в том, что когда вы указываете метод без аргумента, он автоматически предваряет «есть», так что # {user.allowed} вызывает метод «isAllowed». когда вы добавляете аргумент, т. е. # {user.allowed ('group')}, он вызывает «разрешено» без «is». Огромное спасибо. – wjr

Смежные вопросы