【问题标题】:How to create a dynamic p:menuButton inside a jsf dataTable?如何在 jsf dataTable 中创建动态 p:menuButton?
【发布时间】: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的案例。

【问题讨论】:

  • 只有 &lt;c:forEach 运行得足够早以创建新的控制项,例如 &lt;p:anyControl。之后,不允许更改页面中控制项的数量。如果您将&lt;c:forEach 与运行时值一起使用,这是可能的,但您会得到一些奇怪的结果。因为您的数据源是&lt;p:... 控件项,所以无法再构建一些。如果可能性有限,您可以始终构建最大值。带有&lt;c:forEach varStatus="var" 的可能项目并插入rendered="#{bean.rendertest(var.index)。不好但可能......

标签: jsf primefaces datatable facelets


【解决方案1】:

PrimeFaces p:menuButton 与许多其他组件(包括大多数菜单组件)一样,支持模型属性。 page 329 in the PF6 documentation 上提到了这一点。该组件的“动态菜单”部分指的是page 323 上的“通用”动态菜单部分。在那里你可以阅读如何做到这一点。

并且为了防止这个答案成为“仅链接”(对于外部网站,这里是这个问题的副本:Primefaces : how to create <p:menubar> dynamically in primefaces 4?

【讨论】:

  • 我想这就是我们要找的。当我们试图将它添加到表中的每一行时,我想我们会尝试类似 的内容。现在将尝试。非常感谢!
猜你喜欢
  • 2017-01-30
  • 2023-03-21
  • 2012-10-03
  • 2011-08-06
  • 2011-03-31
相关资源
最近更新 更多