我有一个primefaces数据滚动器,用于显示一个简单列表和一组可以过滤该列表的过滤器。
一切都在RequestScoped bean上,我试图避免使用view / session bean,因为它是一个b2c网站,应该有很多访问者。
我的问题是,当我过滤列表时,一切正常,但是当我向下滚动时,过滤器状态丢失(未在bean中设置过滤器)。
我几乎可以肯定这是因为datascroller使用的是部分进程(javax.faces.partial.execute),因此不会处理过滤器...但是datascroller没有用于此的选项。有任何想法吗?
谢谢
最佳答案
我终于以快速而肮脏的方式做到了。 Datascroller似乎没有发送额外参数的选项。
(我更改了加载功能,因此进程发送@all而不是this.id)
PF('datascroll').load= function() {
this.loading = true;
this.cfg.offset += this.cfg.chunkSize;
this.loadStatus.appendTo(this.loaderContainer);
if (this.loadTrigger) {
this.loadTrigger.hide()
}
var b = this, a = {source: this.id, process: '@all', update: this.id, global: false, params: [{name: this.id + "_load", value: true}, {name: this.id + "_offset", value: this.cfg.offset}], onsuccess: function(e, c, d) {
PrimeFaces.ajax.Response.handle(e, c, d, {widget: b, handle: function(f) {
this.list.append(f)
}});
return true
}, oncomplete: function() {
b.loading = false;
b.allLoaded = (b.cfg.offset + b.cfg.chunkSize) >= b.cfg.totalSize;
b.loadStatus.remove();
if (b.loadTrigger && !b.allLoaded) {
b.loadTrigger.show()
}
}};
PrimeFaces.ajax.AjaxRequest(a)
}