Я разрабатываю приложение для просмотра электронной почты. Почтовый ящик часто бывает очень большим, и я хочу использовать LazyDataModel для его извлечения по частям. Извлечение данных работает, но функция init() сначала их рендерит, а потом извлекает.
Бин:
@PostConstruct
public void init() {
JwmaSession jession = (JwmaSession) getfromSession("jession");
listaCorreosEntrada = new LazyCorreoDataModel(jession);
System.out.println("Rows number: " + listaCorreosEntrada.getRowCount());
}
Ленивая КорреоДатаМодель:
@Override
public List<Correo> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<Correo> messageList = new ArrayList<Correo>();
try {
Store store = jession.store;
jFolder = new JwmaFolder(store, "INBOX");
messageList = jFolder.messageList(false, first, pageSize);
} catch (final Exception e) {
e.printStackTrace();
}
System.out.println("List size: " + messageList.size());
return messageList;
}
Во время выполнения этого кода результат:
Rows number: 0
List size: 10
Я мало использовал LazyDataModel, но думаю, что должно быть наоборот.
setRowCount
, как объяснено в принятом ответе на повторяющийся вопрос. - person perissf   schedule 19.08.2017this.setRowCount(messageList.size());
И реализовать функцию@Override getRowKey ()
. - person Alex Cba   schedule 19.08.2017