使用 LazyDataModel 方法刷新 Primefaces dataTable 的后续页面(第二页,第三页等)上的数据的方法是什么?
另外,如果我在dataTable中选择一个项目以在另一个页面上查看其详细信息,然后使用浏览器的Back按钮或实现JavaScript的history.back()方法返回到dataTable,似乎dataTable总是重置它在第一页的位置,而不是回到用户所在的页面。如何强制dataTable保留在最后查看的页面上?
我的延迟加载代码是:
private final class LazyLoader extends LazyDataModel<BookModel>
{
private static final long serialVersionUID = 1L;
public LazyLoader(String sort, String category, String operator, String input) {
setListing(getBookService().getListing(sort, category, operator, input));
}
@Override
public List<BookModel> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
return getListing();
}
}
Submit
方法是:
public String Submit()
{
sort = sortBean.getSort();
category = categoryBean.getCategory();
operator = operatorBean.getOperator();
input = searchBean.getInput();
lazyModel = new LazyLoader(sort, category, operator, input);
lazyModel.setRowCount(listing.size());
return null;
}
我正在使用@ViewScoped
列出图书记录以及显示图书记录的详细信息。
有没有人与Primefaces dataTable有类似的问题?
答案 0 :(得分:1)
继续使用@ViewScoped
。除非您真正需要,否则不应使用@SessionScoped
。
要记住最后一页,您必须设置first
方法的load
属性。您可以使用请求参数执行此操作。类似于:yourview.xhtml?f=3
。
关于刷新,问题是您正在使用延迟加载器但是您一次加载所有内容...您的load
方法是应该按需查询的方法,即逐页。
答案 1 :(得分:0)
在没有延迟加载的情况下,分页是否适用于您?在你进入最难的案例之前,我会验证它是否按预期工作。
如果您希望dataTable在离开JSF页面后记住最后一个分页,那么您需要使您的托管bean SessionScoped。导航离开视图后,ViewScoped托管bean的生命周期结束。
答案 2 :(得分:0)
为了保留所选页面,您必须做两件事。
首先使managedBean会话作用域。
第二次设置数据表和UIData对象之间的绑定。在你的后端bean例如put
private UIData filasUIData = null;
public UIData getFilasUIData() {
return filasUIData;
}
public void setFilasUIData(UIData filasUIData) {
this.filasUIData = filasUIData;
}
现在在您的数据表
中<ice:dataTable
binding="#{yourBean.filasUIData}"
就是这样。