ace:dataTable を使用した遅延読み込みの例を少し持っている人はいますか?. クラス LazyDataModel の load メソッドを実装する方法と、このメソッドを介してデータベースからデータを取得する方法を理解できません..
ありがとう!
ace:dataTable を使用した遅延読み込みの例を少し持っている人はいますか?. クラス LazyDataModel の load メソッドを実装する方法と、このメソッドを介してデータベースからデータを取得する方法を理解できません..
ありがとう!
ace:dataTableには、ICEFacesの "組み込み" の遅延読み込みメカニズムが既にあります (少なくともリリース 3.x 以降では)。
このためにAbstractListを拡張する必要はもうありません。
タグにlazy="true"を追加し、" value " 属性がLazyDataModelを拡張するクラスを指していることを確認するだけです...開始ページ、ページを受け入れる抽象メソッドをそこに実装するだけです。サイズ、並べ替え、およびフィルタリングの引数。
また、ページネーションを使用してページのサイズを決定することも忘れないでください (「rows」属性)。
ここに作業サンプルがあります
myDataTableLazy.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ace="http://www.icefaces.org/icefaces/components"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:icecore="http://www.icefaces.org/icefaces/core">
<h:head>
<title>DataTable</title>
</h:head>
<h:body>
<h:form>
<ace:dataTable id="carTable"
value="#{myDataTableLazy.lazyModel}"
var="car"
rows="5"
paginator="true"
lazy="true" >
<ace:column id="exp" rendered="false">
<ace:expansionToggler />
</ace:column>
<ace:column headerText="Id">
<ice:outputText value="#{car.id}" />
</ace:column>
<ace:column headerText="Name">
<ice:outputText value="#{car.name}" />
</ace:column>
</ace:dataTable>
<h:commandButton id="invio" value="Invio" actionListener="#{myDataTableLazy.cicla}" >
</h:commandButton>
</h:form>
MyDataTableLazy
package my;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import org.icefaces.ace.model.table.LazyDataModel;
import org.icefaces.samples.showcase.example.ace.dataTable.DataTableLazyLoading;
import org.icefaces.samples.showcase.metadata.context.ComponentExampleImpl;
@ManagedBean(name="myDataTableLazy")
@SessionScoped
public class MyDataTableLazy implements Serializable {
private LazyDataModel<Car> lazyModel;
@PostConstruct
public void init() {
lazyModel = new LazyCarDataModel();
}
public LazyDataModel<Car> getLazyModel() {
return lazyModel;
}
public void setLazyModel(LazyDataModel<Car> lazyModel) {
this.lazyModel = lazyModel;
}
public void cicla(ActionEvent e) {
List<Car> lista = (List<Car>) lazyModel.getWrappedData();
for (Car car : lista) {
System.out.println( car.getName() );
}
}
}
LazyCarDataModel
package my;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.icefaces.ace.model.table.LazyDataModel;
import org.icefaces.ace.model.table.SortCriteria;
public class LazyCarDataModel extends LazyDataModel<Car> {
List<Car> carList;
public LazyCarDataModel(){
carList = new ArrayList<Car>();
carList.add(new Car(1, "FiatLazy"));
carList.add(new Car(2, "FerrariLazy"));
carList.add(new Car(3, "PorscheLazy"));
carList.add(new Car(4, "MaseratiLazy"));
carList.add(new Car(5, "MercedesLazy"));
carList.add(new Car(6, "BMWLazy"));
carList.add(new Car(7, "ToyotaLazy"));
carList.add(new Car(8, "FordLazy"));
carList.add(new Car(9, "Alfa RomeoLazy"));
carList.add(new Car(10, "SuzukiLazy"));
carList.add(new Car(11, "RenaultLazy"));
setRowCount(carList.size());
}
@Override
public List<Car> load(int first, int pageSize, SortCriteria[] arg2, Map<String, String> arg3) {
ArrayList list = new ArrayList<Car>();
int initial = first;
for (int i = initial; i < initial + pageSize && i < carList.size(); i++) {
list.add(carList.get(i));
}
return list;
}
}
下のICEFacesice/ace:DataTableは、ネイティブJavaコレクションで動作します。Datatableは、コレクションでget(idx)メソッドを呼び出すだけで、コレクションの要素にアクセスします。
独自のjava.util.AbstractListを実装するように、下位レベルでの遅延読み込み/ページ付けの実装を検討することをお勧めします。
抽象get()メソッドとデバッグを実装することから始めて、icefaces datatableがどのように機能するかを理解します。あるいは、ice / ace:dataTable ice / ace:dataPaginatorソースをチェックすることもできます。
IceFaces Ace は PrimeFaces 2 のコピー/フォークであるため、PrimeFaces のドキュメントとサンプルが役立つ場合があります。primefaces.org/showcase-labs/ui/datatableLazy.jsf
Pheraps はかなり話題から外れていますが、ショーケースの例を作成するには、http ://www.icesoft.org/java/downloads/icefaces-downloads.jsf にアクセスしてください。
ICEfaces 4.x ICEfaces 3.x ICEfaces 1.x タブを選択できます
ICEfaces-xx0-bin.zip ファイルをダウンロードします (登録を行います)。
解凍して、コンパイルするフォルダーに移動します。たとえば、コマンド シェルで ...\ICEfaces-3.3.0-bin.zip\ICEfaces-3.3.0-bin\icefaces\samples\showcase\showcase に移動します。
コマンドを起動します (maven が必要です): mvn package
あなたはshowcase.warを見つけるでしょう
\ICEfaces-3.3.0-bin\ICEfaces-3.3.0-bin\icefaces\samples\showcase\showcase\target