Frage

Ich hatte ein Problem auf einer JSF -Seite. Der DataScroller hat die Paginierung des DataTable -Klickens auf eine Reihe von Seite nicht geändert (bleiben Sie dennoch auf der ersten Seite der Pagination).

  • Richfaces: 3.3.2.sr1
  • JSF: 1.2
  • JBoss 5.0.1

Dieser Code ändert die Paginierung nicht:

<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" />

Ich habe es gelöst, als ich die definierte sortOrder Attribut. Dies funktioniert gut (nur ein Unterschied: sortOrder="ASCENDING" auf einer Spalte):

<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" />

Die Frage ist, warum wir den Sorder definieren müssen, um die DataTable -Pagination mit DataScroller zu korrigieren. Irgendeine Idee ?

Bearbeiten : Dataprovider -Code

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

}
War es hilfreich?

Lösung

Es ist ein Fehler in Richfaces:

TableSorting - integriert - Seiten können nicht von DataScroller umgestellt werden

Bei Klicken auf die nummerierte Seite (z. B. 2) im Ausgangsstatus wurde die Seite nicht umgeschaltet.

Die Tabelle wurde nach dem Klicken auf den Header des sortierten Säulens gut neu geführt.

Das Upgrade auf 3.3.3.Final sollte helfen.

Bezüglich ExtendedTableDataModel:

Es ist Verfügbar in 3.3.3.finale (org.richfaces.model.ExtendedTableDataModel in RichFaces-IMPL-3.3.3.final.jar). Und es ist auch in der Dokumentation erhältlich: http://docs.jboss.org/richfaces/3.3.x/3.3.final/en/apidoc_impl/ (../apidoc_impl/ wird für Richfaces-impl, ../apidoc/ verwendet für RichFaces-ui).

es ist nicht Erhältlich in RF4. In RF4 erkunden Sie diese Klassen:

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

AKTUALISIEREN:

Verwenden ExtendedTableDataModifiableModel Anstatt von ExtendedTableDataModel:

new ExtendedTableDataModifiableModel(dataProvider);

Oder sogar noch besser (wenn die Liste wie in Ihrem Fall als Datenquelle verwendet wird):

new ListDataModel(list);

Andere Tipps

Sie haben Ihren Code mit RichFaces 3.3.3 getestet und funktioniert gut. Die Pagination kann sich in beiden Fällen ändern. Ich denke also, dass die Sorder und die Datentatbare -Pagination keine Beziehung haben, um sich gegenseitig zu beeinflussen.

Und ich fand das Release -Hinweis von RichFaces - Version 3.3.3beta1 Hat einige Fehlerbehebungen über die rich:datascroller . Vielleicht können Sie in Ihrer Entwicklungsumgebung auf RichFaces 3.3.3 aktualisieren, um festzustellen, ob die Probleme noch vorhanden sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top