2017-10-12 138 views
0

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

场景:

1)中数据表
2)选择记录点击p:commandButton以执行业务逻辑和将提供所选记录的结果。 (在p:commandButton我用数据表更新用)

注: 我只能被迫使用Primefaces。 (我发现omniFaces有解决方案,但我不应该使用)

请帮我一把!

回答

0

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

update="@(.mystyle)"

您可以使用此服务您更新的数据表中特定行的目的。
这是策略:
1.将唯一的rowKey设置为styleClass为每行的每列。
2.在PFS处使用rowKey作为您的update属性。

这里是一个简短的代码片段:

<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> 
+0

我有30列,所以我需要写uniquieid所有列。你能否详细说明一下。 –

+0

'uniqueId'不需要是您在数据表中加载的Java Bean上的单独属性。只要选择一个在你的bean中接近Unique的东西[另外,嘿,它总是一个非常好的主意,在java bean上有一个独特的字段]。如果您选择的任何内容在另一个bean中重复,那么它将更新这些行。例如,在我的示例中,如果选择'#{mov.name}',如果有另一行具有相同的电影名称,则它将更新2行。我仍然会使用它,因为它更好地更新几行而不是整个数据表。 –

+0

在我的情况下,我需要使用命令按钮更新选定的行。我选择行并单击命令按钮来刷新行。 –

相关问题