我使用zk框架MVVM
接近并想要显示grid
每页 1000-2000 行。(这确实是用户需要的)但是信息量很大,如果我保存我的 grid
,每个用户将消耗大约 30Mb model
( List<Object>
) 在服务器端的内存中。我决定什么是好的,只需在服务器端呈现此类信息并清理内存,但如果我使用这种方法,我应该进行客户端编程。 (编写js进行ajax调用等)
对于这个问题找不到好的解决方案。我应该使用什么auRequest
, RowRender
或Render 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);
最佳答案
ZK 提供了多种方法来处理您的逻辑客户端。
首先您应该阅读communication part of the client-side zk manual .
另外,this awnser应该会有帮助。
您应该知道,model="@load(vm.o)"
调用 Grid.setModel(...)
并保存一个引用,这样数据就不会被javas gc删除。
所以我认为解决这个问题的唯一方法是仍然使用 MVVM,即使它
据我了解 MVVM 打破模式,将调用
onCreate="@command('createRows',grid=self)"
并添加一个类似的方法
@Command("createRows")
public void createRows(@BindingParam("grid") Grid grid){
//add rows manually here
}
但我不得不说,对于你的任务,我更愿意使用 ZK MVC,
java的cos更好的可读性/可维护性和更多的控制cos。
关于java - zk框架内存网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904509/