【发布时间】:2017-03-25 12:49:17
【问题描述】:
我在 p:dataTable 的 p:column 中有一个 p:menuButton。
到目前为止一切正常。
现在我想让 menuButton 动态化。然而 c:foreach 在渲染表格之前被评估,primefaces 不喜欢在 p:menuButton 中使用 ui:repeat。
如何根据我正在循环的行项目上的集合动态创建多个 p:menuitem,即在下面的示例中,我应该做什么来代替 ?:someKindOfLoop?
<p:dataTable value='#{something.collection}' var='item'>
...
<p:column>
...
<p:menuButton value="Actions">
<p:menuitem value="View ..."
...>
<f:param name="something" value="#{item.id}"/>
</p:menuitem>
<?:someKindOfLoop x="#{item.subCollection}" y="var">
<p:menuitem value="View sub list "
...>
<f:param name="#{var.name}" value="#{var.id}"/>
</p:menuitem>
</?:someKindOfLoop>
</p:menuButton>
...
</p:column>
</p:dataTable>
谷歌搜索产生了许多类似的案例,但是我还没有找到一个不是关于动态创建列(例如:Why can <c:forEach> or <ui:repeat> not access <p:dataTable var>?)或者不处理primefaces的案例。
【问题讨论】:
-
只有
<c:forEach运行得足够早以创建新的控制项,例如<p:anyControl。之后,不允许更改页面中控制项的数量。如果您将<c:forEach与运行时值一起使用,这是可能的,但您会得到一些奇怪的结果。因为您的数据源是<p:...控件项,所以无法再构建一些。如果可能性有限,您可以始终构建最大值。带有<c:forEach varStatus="var"的可能项目并插入rendered="#{bean.rendertest(var.index)。不好但可能......
标签: jsf primefaces datatable facelets