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