Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax更新没有';在p:dataTable上使用筛选器时,无法工作_Ajax_Jsf_Filter_Primefaces_Datatable - Fatal编程技术网

Ajax更新没有';在p: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="#{

我有一个数据库,其中包括primefaces的过滤功能。可以在表上执行某些操作(例如编辑)。使用ajax完成用户操作后,将更新数据表。 如果我不过滤datatable,它会直接更新表,并且工作得很好,不幸的是,如果我使用它并编辑它,它就不会

这就是我的数据表的外观:

    <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:)我在上面的答案中编辑了这个(你可以建议这样编辑),它已经在下面的答案中了!