Показать все строки в томагавке с разбивкой по страницам - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь создать сортируемую таблицу данных с разбивкой по страницам, используя MyFaces . Сортировка работает отлично; Я могу нажать на заголовок столбца, и он будет сортировать данные на основе столбца. Кроме того, нумерация страниц работает нормально по большей части. Таблица данных будет соответствующим образом разделена с некоторым количеством элементов на странице. Кроме того, я хочу, чтобы пользователь мог изменять количество элементов, отображаемых на странице. Опять же, это работает, пока я не хочу, чтобы все элементы отображались на одной странице.

Согласно этой ссылке (также здесь ), если вы установите для атрибута "rows" t: datatable значение "0", он будет отображаться остальные строки в таблице. Однако, когда я пытаюсь это сделать, я получаю исключение, которое включает это сообщение:

javax.faces.FacesException - You need to set a value to the 'rows' attribute of component 'myComponent'

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

<t:dataTable id="myComponent" var="cur"
    value="#{backingBean.list}" sortAscending="#{backingBean.ascending}"
    sortColumn="#{backingBean.sortColumn}" sortable="true"
    styleClass="myClass" rowClasses="oddRow,evenRow"
    rows="#{backingBean.itemsPerPage}" preserveDataModel="false">
    <!-- data here -->
</t:datatable>

Позже у меня есть t: dataScroller для управления нумерацией страниц:

<t:dataScroller id="pageNavigation" for="myComponent"
    paginatorActiveColumnStyle="font-weight:bold;"
    renderFacetsIfSinglePage="false" 
    binding="#{backingBean.scroller}" 
    paginator="true" >
    <!-- facets here -->
</t:dataScroller>

Затем у меня есть h: selectOneMenu , чтобы выбрать количество элементов на странице

<h:selectOneMenu id="myScroller"
    value="#{backingBean.itemsPerPage}"
    required="true" onchange="this.form.submit();"
    valueChangeListener="#{backingBean.updateItemsPerPage}">
    <f:selectItems value="#{backingBean.itemsPerPageArray}" />
</h:selectOneMenu>

Мой боб выглядит примерно так:

public class BackingBean {

    private boolean ascending;
    private Long itemsPerPage;
    private String sortColumn;
    private ArrayList<SelectItem> itemsPerPageArray;
    private ArrayList<SomeObject> list;  // data for table
    private HtmlDataScroller scroller;

    // constructors, getters, setters, and other stuff here

    public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) {
        itemsPerPage = (Long) valueChangeEvent.getNewValue();
        resetScrollerIndex();
    }

    private void resetScrollerIndex() {
        if (scroller!=null && scroller.isPaginator())
            scroller.getUIData().setFirst(0);
    }

    // called in constructor
    private void constructItemsPerPageArray() {
        itemsPerPageArray = new ArrayList<SelectItem>();
        itemsPerPageArray.add(new SelectItem(new Long(10), "10"));
        itemsPerPageArray.add(new SelectItem(new Long(50), "50"));
        itemsPerPageArray.add(new SelectItem(new Long(100), "100"));
        itemsPerPageArray.add(new SelectItem(new Long(0), "All"));
    }
}

Подводя итог, когда я выбираю элемент "Все" из h: selectOneMenu , я получаю исключение, упомянутое выше. Надеюсь, я включил соответствующий уровень детализации. Спасибо!

1 Ответ

0 голосов
/ 24 марта 2011

Хорошо, я думаю, что нашел ответ ...

Если я удаляю первую строку из метода updateItemsPerPage, проблема исправлена. Теперь метод выглядит так:

public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) {
    resetScrollerIndex();
}

Мне показалось, что я попробовал это ...

...