3

ace:dataTable を使用した遅延読み込みの例を少し持っている人はいますか?. クラス LazyDataModel の load メソッドを実装する方法と、このメソッドを介してデータベースからデータを取得する方法を理解できません..

ありがとう!

4

5 に答える 5

4

ace:dataTableには、ICEFacesの "組み込み" の遅延読み込みメカニズムが既にあります (少なくともリリース 3.x 以降では)。

このためにAbstractListを拡張する必要はもうありません。

タグにlazy="true"を追加し、" value " 属性がLazyDataModelを拡張するクラスを指していることを確認するだけです...開始ページ、ページを受け入れる抽象メソッドをそこに実装するだけです。サイズ、並べ替え、およびフィルタリングの引数。

また、ページネーションを使用してページのサイズを決定することも忘れないでください (「rows」属性)。

チェック:ICEFaces docs Ver. 3 エース:データテーブル

于 2012-07-11T14:05:38.433 に答える
2

ここに作業サンプルがあります

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

  }
于 2016-10-18T07:29:52.147 に答える
0

下のICEFacesice/ace:DataTableは、ネイティブJavaコレクションで動作します。Datatableは、コレクションでget(idx)メソッドを呼び出すだけで、コレクションの要素にアクセスします。

独自のjava.util.AbstractListを実装するように、下位レベルでの遅延読み込み/ページ付けの実装を検討することをお勧めします。

抽象get()メソッドとデバッグを実装することから始めて、icefaces datatableがどのように機能するかを理解します。あるいは、ice / ace:dataTable ice / ace:dataPaginatorソースをチェックすることもできます。

于 2012-03-14T21:04:26.867 に答える
0

IceFaces Ace は PrimeFaces 2 のコピー/フォークであるため、PrimeFaces のドキュメントとサンプルが役立つ場合があります。primefaces.org/showcase-labs/ui/datatableLazy.jsf

于 2012-03-15T22:48:27.547 に答える
0

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

于 2016-10-19T09:40:40.687 に答える