DataSCroller y SortOrder en Rich: extendida Datable
-
27-10-2019 - |
Pregunta
Tuve un problema en una página de JSF. El recolector de datos no cambió la paginación de la datos de datos en una serie de páginas (aún permanece en la primera página de la paginación).
- Richfaces: 3.3.2.sr1
- JSF: 1.2
- JBoss 5.0.1
Este código no cambia la paginación:
<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" />
Lo resolví definiendo el sortOrder
atributo. Esto funciona bien (solo una diferencia: sortOrder="ASCENDING"
en una columna):
<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" />
La pregunta es ¿por qué tenemos que definir el orden de clasificación para corregir la paginación dataTable usando DataSCroller? Alguna idea ?
Editar : Código de 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;
}
}
Solución
Es un error en Richfaces:
TableSorting - incorporadas - Las páginas no pueden ser cambiadas por DataSCroller
Cuando se hace clic en la página numerada (por ejemplo, 2) en el estado inicial, la página no se cambió.
La tabla se volvió a renderizar bien después de hacer clic en el encabezado de la columna ordenada.
Actualización a 3.3.3. Final debe ayudar.
Con respecto a ExtendedTableDataModel
:
Eso es Disponible en 3.3.3. Final (org.richfaces.model.ExtendedTableDataModel
en Richfaces-implor-3.3.3.final.jar). Y también está disponible en la documentación: http://docs.jboss.org/richfaces/3.3.x/3.3.3.final/en/apidoc_impl/ (../apidoc_impl/ se usa para richfaces-impl, ../apidoc/ se usa para richfaces-ui).
Está no Disponible en RF4. En RF4, explore estas clases:
org.richfaces.model.ArrangeableState
org.ajax4jsf.model.ExtendedDataModel
org.richfaces.model.ArrangeableModel
ACTUALIZAR:
Usar ExtendedTableDataModifiableModel
en vez de ExtendedTableDataModel
:
new ExtendedTableDataModifiableModel(dataProvider);
O incluso mejor (cuando la lista se usa como fuente de datos como en su caso):
new ListDataModel(list);
Otros consejos
Probé su código usando Richfaces 3.3.3 y funciona bien. La paginación puede cambiar en ambos casos. Así que creo que el orden de clasificación y la paginación datos no tienen una relación para afectarse entre sí.
Y encontré el Nota de lanzamiento de Richfaces - Versión 3.3.3.beta1 tiene algunas correcciones de errores sobre el rich:datascroller
. Quizás pueda actualizar a Richfaces 3.3.3 en su entorno de desarrollo para ver si los problemas aún están allí.