Datascroller и sortOrder на rich: extendedDataTable - PullRequest
1 голос
/ 08 сентября 2011

У меня была проблема на странице Jsf.Контроллер данных не изменил разбиение на страницы таблицы данных, щелкая номер страницы (по-прежнему оставаясь на первой странице разбиения на страницы).

  • Richfaces: 3.3.2.SR1
  • Jsf: 1.2
  • JBoss 5.0.1

Этот код не меняет нумерацию страниц:

<rich:extendedDataTable id="tableDataTable" value="#{beanController.listTableDataModel}" 
    var="tableItem" selectionMode="single"
    rows="3" width="150px" height="100px" selection="#{beanController.tableSelection}">

    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
</rich:extendedDataTable>
<rich:datascroller id="tableDataScroller" align="center" for="tableDataTable" renderIfSinglePage="false" />

Я решил, определив атрибут sortOrderЭто прекрасно работает (только одно различие: sortOrder="ASCENDING" в столбце):

<rich:extendedDataTable id="tableDataTable" value="#{beanController.listTableDataModel}" 
    var="tableItem" selectionMode="single"
    rows="3" width="150px" height="100px" selection="#{beanController.tableSelection}">

    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}" sortOrder="ASCENDING">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
</rich:extendedDataTable>
<rich:datascroller id="tableDataScroller" align="center" for="tableDataTable" renderIfSinglePage="false" />

Вопрос в том, почему мы должны определить sortOrder для исправления нумерации страниц с использованием датакроллера?Есть идеи?

Редактировать : Код поставщика данных

public class BeanDataProvider implements DataProvider<Bean> {


    private static final long serialVersionUID = -3539248649798786324L;

    public BeanDataProvider() {
    }

    public BeanDataProvider(ArrayList<Bean> beans) {
        this.beans = beans;
    }

    private List<Bean> beans;


    public Bean getItemByKey(Object paramObject) {
        Bean resultat = null;
        for (Bean bean : this.getBeans()) {
            if (bean.getIdentifiant().equals(paramObject)) {
                resultat = bean;
                break;
            }
        }
        return resultat;
    }


    public List<Bean> getItemsByRange(int paramInt1, int paramInt2) {
        return this.getBeans().subList(paramInt1, paramInt2);
    }


    public Object getKey(Bean paramT) {
        return paramT.getIdentifiant();
    }


    public int getRowCount() {
        return this.getBeans().size();
    }


    public List<Bean> getBeans() {
        if (beans == null) {
            beans = new ArrayList<Bean>();
        }
        return beans;
    }


    public void setbeans(List<Bean> beans) {
        this.beans = beans;
    }

}

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Это ошибка в RichFaces:

TableSorting - встроенный - страницы не могут переключаться с помощью DataScroller

При нажатии на пронумерованную страницу (например, 2) в исходном состоянии страница не была переключена.

Таблица была перерисована после нажатия на заголовок отсортированного столбца.

Обновление до 3.3.3. Финал должен помочь.

Относительно ExtendedTableDataModel:

Это доступно в 3.3.3. Финал (org.richfaces.model.ExtendedTableDataModel в richfaces-impl-3.3.3.Final.jar).И это также доступно в документации: http://docs.jboss.org/richfaces/3.3.X/3.3.3.Final/en/apidoc_impl/ (../apidoc_impl/ используется для richfaces-impl, ../apidoc/ используется для richfaces-ui).

Это не доступно в RF4.В RF4 изучите эти классы:

org.richfaces.model.ArrangeableState
org.ajax4jsf.model.ExtendedDataModel
org.richfaces.model.ArrangeableModel

ОБНОВЛЕНИЕ:

Используйте ExtendedTableDataModifiableModel вместо ExtendedTableDataModel:

new ExtendedTableDataModifiableModel(dataProvider);

Или дажелучше (когда список используется в качестве источника данных, как в вашем случае):

new ListDataModel(list);
1 голос
/ 12 сентября 2011

Протестировал ваш код, используя richfaces 3.3.3, и он работает нормально. Разбиение страниц можно изменить в обоих случаях.Так что я думаю, что sortOrder и пагинация данных не имеют отношения, чтобы влиять друг на друга.

И я обнаружил, что примечание к выпуску RichFaces - Версия 3.3.3.BETA1 имеет некоторые исправления ошибокrich:datascroller.Возможно, вы можете перейти на richfaces 3.3.3 в вашей среде DEV, чтобы посмотреть, все ли еще проблемы.

...