【问题标题】:How to update Datatable selected rows in JSF using Primefaces?如何使用 Primefaces 更新 JSF 中的 Datatable 选定行?
【发布时间】:2018-03-24 14:40:47
【问题描述】:

虽然这个问题有些重复,但我在网上搜索仍然找不到我想要的确切结果。在我的情况下,我使用具有 CRUD 功能的 Primefaces 在 JSF 中开发一个项目。我在p:dataTable 中有超过 3k 条记录。如果我想更新选定的 5 条记录,我只能更新整个数据表(需要很多时间)。

场景:

1) 选择数据表中的记录
2) 单击p:commandButton 执行业务逻辑,并为选定的记录提供结果。 (在p:commandButton我使用了数据表更新)

注意: 我只能强制使用Primefaces。 (我发现omniFaces 有解决方案但我不应该使用)

请帮帮我!

【问题讨论】:

    标签: jsf primefaces jsf-2 datatable


    【解决方案1】:

    PrimeFaces 将允许您使用 PrimeFacesSelectors(PFS) 更新基于 styleClass 的组件。

    update="@(.mystyle)"

    您可以使用它来更新数据表的特定行。
    这是策略:
    1. 为每一行的每一列设置唯一的rowKeystyleClass
    2. 将 PFS 中的 rowKey 用于您的 update 属性。

    这是一个短代码sn-p:

    <p:dataTable var="mov" value="#{repeatUIBean.mList}" ro>
        <p:column headerText="mov Name">
            <h:outputText styleClass="#{mov.uniqueId}" value="#{mov.name}"/>
        </p:column>
    
        <p:column headerText="mov Release Year">
            <h:outputText styleClass="#{mov.uniqueId}" value="#{mov.year}"/>
        </p:column>
    
        <p:column headerText="Edit mov">
            <p:commandButton value="Edit" update="@(.#{mov.uniqueId})"/>
        </p:column>
    </p:dataTable>
    

    【讨论】:

    • 我有 30 列,所以我需要为所有列编写 uniquieid。你能详细说明一下吗?
    • uniqueId 不需要是要加载到数据表上的 java Bean 上的单独属性。只需在您的 bean 中选择一个接近 Unique [另外,嘿,在 java bean 上拥有一个 unique 文件总是一个好主意]。如果您选择的任何内容在另一个 bean 中重复,那么它也会更新这些 ROW。例如,在我的示例中,如果我选择 #{mov.name},如果有另一行具有相同的电影名称,那么它将更新 2 行。我仍然会使用它,因为它比整个数据表更新几行更好。
    • 在我的情况下,我需要使用命令按钮更新选定的行。我选择行并单击命令按钮刷新行。
    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2014-08-29
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多