DataScroller и Sortorord на Rich: ExtendedDatatable
-
27-10-2019 - |
Вопрос
У меня была проблема на странице JSF. DataScroller не изменял страницу на основе данных на несколько страниц (все еще оставайтесь на первой странице страниц).
- 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" />
Вопрос в том, почему мы должны определить сортировку, чтобы исправить дату -дата, используя данные DataScroller? Есть идеи ?
Редактировать : Код DataProvider
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;
}
}
Решение
Это ошибка в Richfaces:
Tablesorting - встроенные страницы не могут быть переключены с помощью данных DataScroller
При нажатии на пронумерованную страницу (например, 2) в начальном состоянии Пейдж не был переключен.
Таблица была повторно повторно заполнена после нажатия заголовка сортированного колонны.
Обновление до 3.3.3.final должно помочь.
Касательно ExtendedTableDataModel
:
Это является Доступно в 3.3.3.final (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);
Другие советы
Протестировал свой код, используя Richfaces 3.3.3, и он работает нормально. Парень может измениться в обоих случаях. Поэтому я думаю, что сортировка и дата -табличная страница не имеют отношения, чтобы повлиять на друг друга.
И я нашел Выпуск примечания Richfaces - Версия 3.3.3.beta1 есть некоторые исправления ошибок в rich:datascroller
Анкет Возможно, вы можете перейти на Richfaces 3.3.3 в своей среде Dev, чтобы увидеть, есть ли проблемы еще.