2

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

<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 版

4

1 回答 1

1

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

因此,在您的特定示例中,在<c:forEach>运行时,定义的#{group}变量<ui:repeat>在 EL 范围内无处可用,并且<c:forEach>基本上作为 items 值检索null,因此没有任何可迭代的内容。

您的构造仅在您也替换外部时才<ui:repeat>有效<c:forEach>

也可以看看:

于 2013-04-05T14:18:00.660 回答