当用户使用DataList上的 Paginator 单击页面时,我试图捕获 Page 事件。用户指南没有提到这个组件的任何 Ajax 行为,但我还是尝试<p:ajax event="page">
了,发现不支持事件“页面”。
DataList有可用的事件吗?如果没有,有没有人知道如何将每个页面保存为用户页面?
谢谢 :) 尼尔
当用户使用DataList上的 Paginator 单击页面时,我试图捕获 Page 事件。用户指南没有提到这个组件的任何 Ajax 行为,但我还是尝试<p:ajax event="page">
了,发现不支持事件“页面”。
DataList有可用的事件吗?如果没有,有没有人知道如何将每个页面保存为用户页面?
谢谢 :) 尼尔
preRenderComponent
您可以使用 datalist 上的通用事件挂钩组件的渲染生命周期(每次分页操作都会重新渲染组件) 。只需将以下内容添加到您的数据列表中:
<p:dataList>
<f:event type="preRenderComponent" listener="#{yourBean.operation}"/>
</p:dataList>
如果您单击页面链接,则可以覆盖标准的 PrimeFaces javascript 函数。从那里你可以调用 remoteCommand 或任何你想要的......
我知道这不是最佳做法,而是一种可能性;)
PrimeFaces.widget.Paginator.prototype.bindPageLinkEvents = function(){
var $this = this;
this.pagesContainer.children('.ui-paginator-page').on('click.paginator', function(e) {
var link = $(this);
if(!link.hasClass('ui-state-disabled')&&!link.hasClass('ui-state-active')) {
$this.setPage(parseInt(link.text()) - 1);
}
// your code goes here
})
.on('mouseover.paginator', function() {
var item = $(this);
if(!item.hasClass('ui-state-disabled')&&!item.hasClass('ui-state-active')) {
item.addClass('ui-state-hover');
}
})
.on('mouseout.paginator', function() {
$(this).removeClass('ui-state-hover');
})
.on('focus.paginator', function() {
$(this).addClass('ui-state-focus');
})
.on('blur.paginator', function() {
$(this).removeClass('ui-state-focus');
})
.on('keydown.paginator', function(e) {
var key = e.which,
keyCode = $.ui.keyCode;
if((key === keyCode.ENTER||key === keyCode.NUMPAD_ENTER)) {
$(this).trigger('click');
e.preventDefault();
}
});
};
或者看看这个答案。我非常喜欢它! https://stackoverflow.com/a/25930991/2265727