我正在尝试在丰富的上下文菜单组件中动态生成丰富的菜单项。这是我的代码:
<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版
答案 0 :(得分:1)
<c:forEach>
在视图构建期间运行,此时XHTML文件将转换为JSF组件树。 {J}组件树即将生成HTML时,<ui:repeat>
在视图渲染时运行。
因此,在您的特定示例中,<c:forEach>
运行时,#{group}
定义的<ui:repeat>
变量在EL范围和<c:forEach>
中无法使用基本上将null
检索为项值,因此无需迭代。
只有在<ui:repeat>
替换外<c:forEach>
时,您的构造才有效。