Icefaces ace:dataTable延迟加载

时间:2012-03-09 17:39:23

标签: datatable loading lazy-evaluation icefaces ace-editor

有没有人有一个懒惰加载ace的例子:dataTable?.. 我无法理解如何实现类LazyDataModel的加载方法..以及如何通过此方法从数据库中获取数据..

谢谢!

5 个答案:

答案 0 :(得分:4)

ace:dataTable 在ICEFaces中已经有一个“内置”延迟加载机制 (至少发布3.x及以上版本。)

不再需要为此扩展 AbstractList

您需要做的就是将 lazy =“true” 添加到您的代码中,并确保“ “属性指向扩展 LazyDataModel 的类...您只需要实现摘要 那里的方法接受起始页面,页面大小,排序和&过滤参数。

另外不要忘记使用分页并确定页面大小(“行”属性)。

检查:ICEFaces docs Ver. 3 ace:dataTable

答案 1 :(得分: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;
    }

  }

答案 2 :(得分:0)

ICEFaces ice / ace:下面的DataTable适用于本机Java Collections。 Datatable只需通过调用集合中的get(idx)方法即可访问集合中的元素。

我建议你应该考虑在较低级别实现延迟加载/分页,比如实现自己的java.util.AbstractList

首先实现其抽象的get()方法和调试,以了解icefaces数据表的工作原理,或者你可以查看ice / ace:dataTable ice / ace:dataPaginator sources。

答案 3 :(得分:0)

由于IceFaces Ace是PrimeFaces 2的副本/分支,PrimeFaces文档和样本可能会有所帮助。 primefaces.org/showcase-labs/ui/datatableLazy.jsf

答案 4 :(得分:0)

Pheraps它非常偏离主题,但要构建展示示例: 转到http://www.icesoft.org/java/downloads/icefaces-downloads.jsf

你可以选择ICEfaces 4.x ICEfaces 3.x ICEfaces 1.x tab

下载ICEfaces-x.x.0-bin.zip文件(您进行注册)

解压缩并转到要编译的文件夹,例如,在命令shell中,转到 ... \ ICEfaces-3.3.0-bin.zip \ ICEfaces的-3.3.0槽\ ICEfaces的\样本\陈列柜\陈列柜

启动命令(你必须有maven): mvn package

您将在

中找到showcase.war

\ ICEfaces的-3.3.0斌\ ICEfaces的-3.3.0槽\ ICEfaces的\样本\陈列柜\陈列柜\目标