DataScrollerと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
属性。これは正常に機能します(1つの違いのみ: 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 -ingrubtin -datascrollerによってページを切り替えることはできません
初期状態の番号付きページ(例など)をクリックしたとき、ページは切り替えられませんでした。
テーブルは、ソートコラムのヘッダーをクリックした後、十分に再レンダリングされました。
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.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にアップグレードして、問題がまだあるかどうかを確認できます。