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;
    }

}
¿Fue útil?

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top