Primefaces dataTable问题

时间:2011-04-21 14:00:26

标签: datatable jsf-2 refresh primefaces

使用 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有类似的问题?

3 个答案:

答案 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}"

就是这样。