Проблемы в LazyDataModel. Не сбрасывать первый параметр

У меня проблема с LazyDataModel (список) в JSF. Проблема в следующем:

У меня есть HTML с формой поиска и списком результатов этого поиска. Я делаю первый поиск и показываю в этом разбитом на страницы списке, когда я перехожу к страницам, например, на четвертой странице:

Если я реализую новый поиск, в этом новом результате список списывается со страницы 4. Сначала параметр не сбрасывается при каждом новом поиске. Зачем?

  1. Боб имеет аннотации: @Component и @ViewScoped.
  2. Список с результатами представляет собой LazyDataModel и перезаписывает методы: load, getRowKey и getRowData.
  3. Версии: JSF 2.0, PrimeFaces 6.1 и Spring 4.0.3.RELEASE.

1 ответ

Проблема в том, что вы поддерживаете ту же модель данных. Вам нужно создать новую модель данных при обновлении списка.

Например, модель данных:

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

И боб (в данном случае 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;
    }
}

Таким образом, при каждом поиске создается новая модель данных.

Другие вопросы по тегам