PrimeFaces 为 p:dataTable 提供了非常好的过滤器。从 UX 站点来看它很棒,因为过滤器字段位于列标题中,所以毫无疑问您正在过滤什么,并且它正在实时工作 - 数据会随着您的输入而变化(好吧,只有当您短暂暂停时,但它在我的意见正是用户的期望)。
现在我想在标题中放置一些自定义的东西作为过滤器。所以,我的想法是在标题方面放置一个组件:
<p:column ...>
<f:facet name="header">
<some:myComponent onkeydown="filterAction()"/>
</f:facet>
</p:column>
问题是filterAction
不能更新整个dataTable组件(因为用户输入的组件会被重新创建),但它必须更新表体。
我认为我可以使用PrimeFaces 选择器(基于 jQuery 选择器)来做到这一点,但根据主题如何仅使用数据表的选择器更新数据行?这不可能。并且 datatable.js 包含专门的 Ajax 调用来实现这一点(PrimeFaces 3.5 中的第 839 行,发布):
options.onsuccess = function(responseXML) {
var xmlDoc = $(responseXML.documentElement),
updates = xmlDoc.find("update");
....
$this.tbody.html(content);
我的问题是,是否可以使用这样的单独的过滤器组件,它只会刷新表体,就像它所做的标准过滤器一样,而不深入 PF 内部并编写这样的专门的 AJAX 处理程序?
当然,也可以在dataTable之外做filter,但是这样会减少UX(现在使用我的应用的人很喜欢现在的设计)。