zk框架内存网格

时间:2012-12-16 18:59:59

标签: java java-ee zk java-ee-5

我使用zk框架MVVM方法,并希望显示grid每页1000-2000行。(这真的需要用户)但它是很多信息,每个用户都会消费如果我将grid modelList<Object>)保存在服务器端的内存中,则为30Mb。我决定什么是好的只是在服务器端渲染这种信息和清理内存,但如果我使用这种方法我应该去客户端编程。 (为ajax调用写js等) 无法找到解决此问题的好方法。我应该在客户端使用auRequestRowRenderRender script,还是在渲染网格后使用空数据?

UPD: ZUL

<grid apply="org.zkoss.bind.BindComposer"
      viewModel="@id('vm') @init('Pojo')"
      self="@define(content)" height="100%" width="100%">
      model="@load(vm.o)" emptyMessage="${c:l('empty_table')}"
      stubonly="true" onCreate="@command('clear')">
   <columns>
      ...cols...
   </columns>
   <template name="model">
      <row>
           <label value="@load(each.data)" />
      </row>
   </template>
</grid>

JAVA:

 public class Pojo {

     private List<Object> o;
     private Grid g;

     @Init
     public void init(){
        o = loadFromDaoOneHundredItems()
     }

     @AfterCompose
     public afterCompose(@ContextParam(ContextType.VIEW) Component view){
          g.setPageSize(1000);
     }
 }

UPD

    final Rows rs = new Rows();
    for (int i = 0; i < 1000; i++) {
        final Row r = new Row();
        r.appendChild(new Label("sdf"));
        r.appendChild(new Label("sdf"));
        r.appendChild(new Label("sdf"));
        rs.appendChild(r);
    }
    grid.appendChild(rs);
    ListModelList<Object> o = null;
    grid.setModel(o);

1 个答案:

答案 0 :(得分:0)

ZK提供了许多方法来处理您的逻辑客户端 首先,您应该阅读communication part of the client-side zk manual 此外,this awnser应该会有所帮助。

您应该知道model="@load(vm.o)"来电Grid.setModel(...) 并保存一个引用,以便javas gc不会删除数据。

所以我认为解决这个问题的唯一方法是,即使它仍然使用MVVM 据我所知MVVM打破了pettern,将会打电话给

onCreate="@command('createRows',grid=self)"

并添加类似

的方法
@Command("createRows")
public void createRows(@BindingParam("grid") Grid grid){
 //add rows manually here
}

但我必须说,对于你的任务,我更愿意使用ZK MVC,
更好的可读性/可维护性以及更多的java控制cos。