开发者

Primefaces dataTable issues

What is the method to refresh data on subsequent pages - second page, third page, etc - of a Primefaces dataTable using the LazyDataModel开发者_如何学Go method?

Also, if I select an item in a dataTable to view its detail on another page, then came back to the dataTable using either the browser's Back button or implement JavaScript's history.back() method, it seems that the dataTable always reset its position to the first page instead of going back to the page the user was on. How can I force the dataTable to stay on the last viewed page?

My codes for lazy loading are:

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();
    }
}

And for the Submit method is:

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;
} 

I'm using @ViewScoped for listing the book records as well as showing detail of a book record.

Does anyone has similar issues with Primefaces dataTable?


Keep using @ViewScoped. You should not use @SessionScoped unless you have real needs for it.

To remember the last page, you have to set the first attribute of the load method. You can do that with request parameters. Something like: yourview.xhtml?f=3 .

About the refreshing, the thing is that you are using a lazy loader but you're loading everything at once... Your load method is the one that should do the query on demand, that is, page by page.


Does pagination work for you without lazy loading? I would verify that works as expected before you jump into the hardest case.

If you want your dataTable to remember the last pagination after you navigate away from the JSF page then you need to make your managed bean SessionScoped. The lifecycle of the ViewScoped managed bean ends after navigation leaves the view.


In order to keep the selected page you have to do 2 things.

First make the managedBean session scoped.

Second set a binding between the datatable and a UIData object. In your backend bean for example put

private UIData filasUIData = null;

public UIData getFilasUIData() {
    return filasUIData;
}

public void setFilasUIData(UIData filasUIData) {
    this.filasUIData = filasUIData;
}

Now in your data table

<ice:dataTable
    binding="#{yourBean.filasUIData}"

that´s all.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜