Primefaces: реализовать LazyDataModel - PullRequest
6 голосов
/ 13 января 2012

Я пытаюсь реализовать таблицу с отложенной загрузкой.Я думаю, что я прошел все этапы демонстрационной страницы и документации, но я всегда получаю сообщение «Записи не найдены».Я думаю, я сократил код до минимального выражения, по крайней мере, должна быть одна запись:

Страница таблиц:

<h:form id="listaEmpresas">
<p:dataTable id="tablaEmpresas" value="#{empresasTableMB.lazyDataModel}" var="empresa">
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="#{msgs.empresa_tabla_nombre}"/>
                        </f:facet>
                        <h:outputText value="#{empresa.nombre} "/>
                    </p:column>

</p:dataTable>
</h:form>

LazyDataModel:

@Override
public List<Empresa> load(int first, int pageSize, String sortField, SortOrder so, Map<String, String> filters) {
    List<Empresa> listaEmpresas = new ArrayList();
    Empresa e = new Empresa();
    e.setNombre("Company");
    listaEmpresas.add(e);
    this.setRowCount(1);
    return listaEmpresas;
 }


@Override
public void setRowIndex(int rowIndex) {
    if (rowIndex == -1 || getPageSize() == 0) {
        super.setRowIndex(-1);
    }
    else
        super.setRowIndex(rowIndex % getPageSize());
}

Я долженпереопределить setRowIndex или я получаю исключение "java.lang.ArithmeticException: / by zero".Я использую primefaces-3.1-SNAPSHOT, jsf 2.0.3 и tomcat 6.0.Пожалуйста помоги.Чего мне не хватает?

Ответы [ 5 ]

2 голосов
/ 19 июля 2013

Добавьте lazy=true в вашу таблицу данных. После добавления этой таблицы данных можно вызвать ваш метод load().

1 голос
/ 25 июля 2015

нужно добавить поле private int rowCount; а затем в вашем load(...) методе установите значение номера записи в вашем списке в это поле (rowCount). без этого <p:dataTable ...> получит «Запись не найдена», а также, если вы не укажете атрибут rows ="10" (например), он не будет отображать строки!

0 голосов
/ 21 января 2014

Вы не вызываете метод загрузки. Сначала вызовите метод загрузки перед объявлением таблицы данных простого лица.

0 голосов
/ 18 июля 2013

Это поведение описано в https://code.google.com/p/primefaces/issues/detail?id=1544, и, очевидно, вы можете избежать этого, явно позвонив по телефону lazyDataModel.setPageSize();

Здесь есть соответствующая запись:

Primefaces DataTable+ JPA / Hibernate Pagination

0 голосов
/ 12 февраля 2013

Вам также нужно реализовать LazyDataModel#getRowKey и LazyDataModel#getRowData.

Предположим, у вас есть что-то вроде:

class Empresa {

    private long id;
    private String nombre;

    // getters and setters...

}

Тогда:

  • getRowKey возвращает идентификатор для Empresa объекта
  • getRowData получает объект Empresa по идентификатору
class MyLazyDataModel {

    // stuff you already have comes here...

    public Empresa getRowData(String rowKey) {
        return empresaRepository.getEmpresaById(Long.valueOf(rowKey));
    }

    public Object getRowKey(Empresa empresa) {
        return empresa.getId();
    }

}
...