Ajax更新没有';在p:dataTable上使用筛选器时,无法工作
我有一个数据库,其中包括primefaces的过滤功能。可以在表上执行某些操作(例如编辑)。使用ajax完成用户操作后,将更新数据表。 如果我不过滤datatable,它会直接更新表,并且工作得很好,不幸的是,如果我使用它并编辑它,它就不会 这就是我的数据表的外观:Ajax更新没有';在p:dataTable上使用筛选器时,无法工作,ajax,jsf,filter,primefaces,datatable,Ajax,Jsf,Filter,Primefaces,Datatable,我有一个数据库,其中包括primefaces的过滤功能。可以在表上执行某些操作(例如编辑)。使用ajax完成用户操作后,将更新数据表。 如果我不过滤datatable,它会直接更新表,并且工作得很好,不幸的是,如果我使用它并编辑它,它就不会 这就是我的数据表的外观: <p:dataTable id="dataTable" var="row" value="#{bean.value}" filteredValue="#{
<p:dataTable id="dataTable" var="row"
value="#{bean.value}"
filteredValue="#{bean.filteredValue}"
paginator="true" rows="25" paginatorPosition="bottom"
rowKey="${row.id}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
editable="true">
以及触发更新的按钮
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"/>
更新数据表后必须调用它的客户端
filter()
方法
<p:dataTable widgetVar="dataTableWidgetVar" id="dataTable" var="row"
value="#{bean.value}"
filteredValue="#{bean.filteredValue}"
paginator="true" rows="25" paginatorPosition="bottom"
rowKey="${row.id}"
editable="true">
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"
oncomplete="PF('dataTableWidgetVar').filter()"/>
对于早于5的PrimeFaces版本,应使用
<p:commandButton value="Save"
actionListener="#{bean.save}"
update=":form"
oncomplete="dataTableWidgetVar.filter()"/>
添加Primefaces 5.x的答案,因为它们改变了调用小部件变量的方式: 与Kerem Baydogan的答案几乎相同,但稍作修改:
<p:commandButton value="Save"
actionListener="#{bean.save}"
update="@form"
oncomplete="PF('dataTableWidgetVar').filter()"/>
或者,您可以通过以下方式清除过滤器:
<p:commandButton value="Save"
actionListener="#{bean.save}"
update="@form"
oncomplete="PF('dataTableWidgetVar').clearFilters()"/>
如果您使用的是primefaces版本5,只需创建表示单个数据行的数据类,就可以为primefaces版本大于或等于5的实现可序列化,您可以使用此代码块,它工作得非常好
<p:dataTable var="page" value="#{yourBean.allData}" widgetVar="yourWidgetVarName"/>
<p:commandButton value="delete"
actionListener="#{yourBean.delete}"
update="@form"
oncomplete="PF('yourWidgetVarName').filter()"/>
您使用的是行版还是单元格版?你能发布更多关于桌子的代码吗?凯伦,我接受了你在回答中所说的。它工作得很好。但每次手术后都会显示咆哮信息。如果我使用您的解决方案,咆哮消息会尽快消失(1秒)。您对此有什么想法吗?filter()
方法创建另一个更新操作。如果您使用的是autoUpdate=“true”
请尝试autoUpdate=“false”
并手动更新咆哮。你也可以把它粘起来。但是请记住,autoUpdate=“true”
适用于简单页面。如果您需要完全控制,请不要使用autoUpdate=“true”
Hi Kerem,不久前我问过您这个问题。它工作得很好,再次感谢你。我现在面临着使用它的另一个问题。如果所选值(使用筛选器)是“我的数据表”第3页中的一行,并且在对该行执行操作后,分页将自动重置为第1页。我希望它将焦点放在所选行所在的页面上,在本例中是第3页。如果手动转到第3页,该行仍处于选中状态。您对此有什么建议吗?有一个名为“first”的datatable属性,解释为“要显示的第一个数据的索引”。我想这可能会解决您的问题。是的,您是对的,所以如果您不想刷新datatable两次,您只能调用filter方法并从按钮的update属性中删除datatable的id。正如我前面提到的,filter()方法创建另一个更新操作。这是这个问题的答案吗?我的类总是可序列化的,我有这个问题!如果您没有实现serialazable,过滤器当然不会正常工作。我遇到了同样的问题,这个解决方案奏效了。我没有您使用serializable的信息,因此无法排除此解决方案。lol,您是否了解这里的视图(由javascript控制的部分)与托管bean根本没有关系!如果你能给我一个很好的解释,说明“可序列化”是如何涉及的,我将非常感激!在那个视图中你将展示什么?模型!如果你无知,就不要投票!谢谢你的更新。Jazaka allah khairan bro:)我在上面的答案中编辑了这个(你可以建议这样编辑),它已经在下面的答案中了!