2012-12-16 81 views
1

我使用zk框架MVVM的方法,並希望顯示grid每頁1000-2000行(這真的需要用戶)但它是很多的信息,每個用戶將消耗大約30Mb,如果我會將我的gridmodelList<Object>)保存在服務器端的內存中。我決定在服務器端渲染這類信息並清理內存,但如果我使用這種方法,我應該去客戶端編程。 (爲jjax調用寫js等) 找不到這個問題的好解決方案。我應該在客戶端使用auRequestRowRenderRender script,或者在渲染網格之後使用空數據?zk框架內存網格

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

請先提供驗證碼。其次,2000行如何同時顯示?你使用ZK CE還是PE/EE?這些數據是什麼樣的?不同的用戶需要加載不同的數據嗎?如果沒有,你應該緩存你的數據(如果只有很小的差異必須單獨保存,那麼也一樣)。 –

+0

我添加僞代碼,是2000行,這是可怕的,但可以。我使用免費版本的ZK。我認爲是CE。數據POjO'String'和'int'。是的每個用戶需要加載不同的數據。我想只輸出像'php'中的'html'。並通過JS發送AJAX或通過auRequests。但我找不到教程。官方zk切成塊。很難理解它。謝謝。 – Mrusful

回答

0

ZK提供了多種方式來處理你的邏輯客戶端。
起初您應該閱讀communication part of the client-side zk manual
另外,this awnser應該會有所幫助。

你應該知道,model="@load(vm.o)"電話Grid.setModel(...)
並保存參考,這樣的數據不會被GC的Java類中刪除。

因此,我認爲唯一的辦法仍用MVVM來解決這個問題,即使它
斷pettern因爲據我所知MVVM,將調用

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

,並添加一個方法像

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

但我不得不說,你的任務,我會更喜歡使用MVC ZK,更好的可讀性/可維護性
COS和更多的控制因素的Java。

+0

我使用'setModel(null)'後,它從網格中刪除所有行。我真的不需要服務器上的'2Mb'來處理25個'Row'實例。渲染後,模型中的Pojo類也很好。 – Mrusful

+0

我編輯了這部分,但我真的認爲你最好使用MVC。 –

+0

我更新了你的建議,但仍記憶猶新。我在YourKit中看到。行和行和標籤。根GC引用到DesktopImpl - > Cache的zk。你能解釋一下MVC方法嗎?我問這是因爲我認爲你使用什麼方法。核心仍然是一樣的。 – Mrusful