我正在尝试在一个富上下文菜单组件内动态生成富菜单项。下面是我的代码:
<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…有道理吗?