DataScroller e sortOrder su Rich: ExtendedDatable
-
27-10-2019 - |
Domanda
Ho avuto un problema su una pagina JSF. DataSCroller non ha modificato la paginazione del clic dati su una serie di pagina (rimangono comunque nella prima pagina della paginazione).
- Richfaces: 3.3.2.sr1
- JSF: 1.2
- JBoss 5.0.1
Questo codice non cambia la paginazione:
<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" />
L'ho risolto definendo il sortOrder
attributo. Funziona bene (solo una differenza: sortOrder="ASCENDING"
su una colonna):
<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 domanda è: perché dobbiamo definire l'ordine per correggere la paginazione dati utilizzando DataSCroller? Qualche idea ?
Modificare : Codice 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;
}
}
Soluzione
È un bug in richfaces:
Tablesorting - integrato - Le pagine non possono essere commutate da DataSCroller
Se si fa clic sulla pagina numerata (ad esempio 2) nello stato iniziale, la pagina non è stata commutata.
La tabella è stata nuovamente resitta dopo aver fatto clic sull'intestazione della colonna ordinata.
L'aggiornamento a 3.3.3.finale dovrebbe aiutare.
Per quanto riguarda ExtendedTableDataModel
:
Esso è Disponibile in 3.3.3.finale (org.richfaces.model.ExtendedTableDataModel
In Richfaces-Impl-3.3.3.final.jar). Ed è disponibile anche nella documentazione: http://docs.jboss.org/richfaces/3.3.x/3.3.3.final/en/apidoc_impl/ (../apidoc_impl/ viene utilizzato per Richfaces-impl, ../apidoc/ è usato per Richfaces-ui).
è non Disponibile in RF4. In RF4 esplora queste classi:
org.richfaces.model.ArrangeableState
org.ajax4jsf.model.ExtendedDataModel
org.richfaces.model.ArrangeableModel
AGGIORNARE:
Uso ExtendedTableDataModifiableModel
invece di ExtendedTableDataModel
:
new ExtendedTableDataModifiableModel(dataProvider);
O anche meglio (quando l'elenco viene utilizzato come fonte di dati come nel tuo caso):
new ListDataModel(list);
Altri suggerimenti
Ha testato il codice utilizzando RichFaces 3.3.3 e funziona bene. La paginazione può essere cambiata in entrambi i casi. Quindi penso che la sorto e la paginazione dati non abbiano una relazione per influenzare gli altri.
E ho trovato il Nota di rilascio di richfaces - versione 3.3.3.beta1 ha alcune correzioni di bug sul rich:datascroller
. Forse puoi passare a Richfaces 3.3.3 nel tuo ambiente Dev per vedere se i problemi sono ancora lì.