0

我对 JSF 中的LazyDataModel(列表)有疑问。问题是下一个:

我有一个带有搜索表单和该搜索结果列表的 xhtml。当我继续浏览页面时,我进行了第一次搜索并在此分页列表上显示,例如,在第四页中:

在此处输入图像描述

如果我实现了一个新的搜索,在这个新的结果中,第 4 页的列表收费。参数首先不要在每次新的搜索中重置。为什么?

在此处输入图像描述

  1. 该 bean 具有注释:@Component@ViewScoped
  2. 结果列表是一个LazyDataModel并覆盖了方法:loadgetRowKeygetRowData
  3. 这些版本是:JSF 2.0、PrimeFaces 6.1 和 Spring 4.0.3.RELEASE。
4

1 回答 1

0

问题是如果您维护相同的数据模型。刷新列表时需要创建一个新的数据模型。

例如,数据模型:

public class MyDataModel extends LazyDataModel<MyEntity> {
   // my datamodel
}

还有 bean(在本例中为 CDI)

@Named
@ViewScoped
public class MyBean implements Serializable {

    private static final long serialVersionUID = 1L;    

    private MyDataModel myDataModel;

    //calling this method, a new datamodel is created and populated
    public void search() {
        List myList = new ArrayList(); //load from database
        loadDatamodel(myList);  
    }

    private void loadDatamodel(List myList) {               
        myDataModel = new MyDataModel(myList);
    }

    public MyDataModel getMyDataModel() {
        return myDataModel;
    }
}

因此,在每次搜索中,都会创建一个新的数据模型。

于 2017-09-29T13:45:20.427 回答