如何获取要呈现的组件的id

时间:2013-07-19 17:33:49

标签: jsf richfaces

我正在使用模板在我的所有页面上显示下拉菜单。我想只渲染特定用户可以访问的菜单项。

<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();

获取组件的id,以便它可以决定是否呈现项目。

不幸的是,返回的id不是menuGroup的id;相反,它是容纳menuGroup的容器。由于它是封闭容器,因此该组件具有其子项列表,并且该项列表中包含id为“item”的组件。我的问题是,我无法弄清楚要求“允许”方法的子项,即此项目,“项目”或列表中的其他子项之一。有没有办法询问父容器正在调用哪个子句“allowed()”?

1 个答案:

答案 0 :(得分:2)

为什么不直接将id传递给bean?

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