在丰富的上下文菜单中动态生成丰富的菜单项

时间:2013-04-05 05:44:09

标签: jsf-2 foreach richfaces jstl uirepeat

我正在尝试在丰富的上下文菜单组件中动态生成丰富的菜单项。这是我的代码:

<ui:repeat var="group" value="#{myBean.groups}" >
  <div align="center"> 
    <rich:panel>
      <h:graphicImage value="#{group.iconUrl}"/>
      <rich:contextMenu attached="true">
        <c:forEach var="child" items="#{group.children}">
          <rich:menuItem label="#{child.name}" />
        </c:forEach>
      </rich:contextMenu>
    </rich:panel>   
  </div>
</ui:repeat>

我正在使用此标记库:

xmlns:c="http://java.sun.com/jsp/jstl/core

我的问题是没有生成菜单项。我也尝试用 ui:repeat 替换 c:forEach ,但它仍然无效。


我尝试了一些实验来消除一些因素。我删除了丰富的上下文菜单并使用了ui:repeat

<ui:repeat var="group" value="#{myBean.groups}" >
  <div align="center"> 
    <rich:panel>
      <h:graphicImage value="#{group.iconUrl}"/>
      <ui:repeat var="child" value="#{group.children}">
         <h:outputText value="#{child.name}" />
      </ui:repeat>
    </rich:panel>   
  </div>
</ui:repeat>

上面的代码片段工作。我想与上下文菜单和ui重复的渲染存在冲突。

可悲的是,我真的需要将group.children放在丰富的上下文菜单组件中。你能否提出任何可以帮助我达到我想要的方法?


注意:我使用的是servlet 3.0版

1 个答案:

答案 0 :(得分:1)

<c:forEach>在视图构建期间运行,此时XHTML文件将转换为JSF组件树。 {J}组件树即将生成HTML时,<ui:repeat>在视图渲染时运行。

因此,在您的特定示例中,<c:forEach>运行时,#{group}定义的<ui:repeat>变量在EL范围和<c:forEach>中无法使用基本上将null检索为项值,因此无需迭代。

只有在<ui:repeat>替换外<c:forEach>时,您的构造才有效。

另见: