如何使用Primefaces更新JSF中的数据表选择行?
问题描述:
虽然这个问题有所重复,但我在网上搜索仍然找不到我想要的确切结果。在我的情况下,即时通讯使用具有CRUD功能的Primefaces在JSF中开发项目。我在p:dataTable
中有超过3k条记录。如果我想更新选定的5条记录,我只能更新整个dataTable(花费很多时间)。如何使用Primefaces更新JSF中的数据表选择行?
场景:
1)中数据表
2)选择记录点击p:commandButton
以执行业务逻辑和将提供所选记录的结果。 (在p:commandButton
我用数据表更新用)
注: 我只能被迫使用Primefaces
。 (我发现omniFaces
有解决方案,但我不应该使用)
请帮我一把!
答
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>
我有30列,所以我需要写uniquieid所有列。你能否详细说明一下。 –
'uniqueId'不需要是您在数据表中加载的Java Bean上的单独属性。只要选择一个在你的bean中接近Unique的东西[另外,嘿,它总是一个非常好的主意,在java bean上有一个独特的字段]。如果您选择的任何内容在另一个bean中重复,那么它将更新这些行。例如,在我的示例中,如果选择'#{mov.name}',如果有另一行具有相同的电影名称,则它将更新2行。我仍然会使用它,因为它更好地更新几行而不是整个数据表。 –
在我的情况下,我需要使用命令按钮更新选定的行。我选择行并单击命令按钮来刷新行。 –