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



我正在尝试在一个富上下文菜单组件内动态生成富菜单项。下面是我的代码:

<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重复之间存在冲突。

遗憾的是,我真的有点需要放置组。富上下文菜单组件中的子组件。你能建议一些方法来帮助我实现我想要的吗?


注意:我使用servlet 3.0版本

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

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

你的结构将只工作,如果你将外部的<ui:repeat>替换为<c:forEach>

参见:

  • JSTL在JSF2 Facelets…有道理吗?

相关内容

  • 没有找到相关文章

最新更新