2016-07-29 74 views
0

我正在使用loadableDetachableModel來顯示一些組件,它通過在load方法中調用webservice來獲取我第一次需要的數據。但用戶可以執行一些操作,如插入或刪除該模型。所以我不想第一次打電話給那個webservice。如何在Apache Wicket中編輯LoadableDetachableModel

因此,代碼是這樣:

myLoadableDetachablModel = new LoadableDetachableModel<List<MyType>>() { 
private static final long serialVersionUID = 1L; 

@Override 
protected List<MyType> load() { 
    // I don't want to touch DB except very first time 
    List<MyType> neededObjects = myService.getMyMethod(); 
    return neededObjects; 
}}; 

你對我有什麼建議嗎?感謝

+0

我有點困惑 - 'LoadableDetachableModel'似乎正是你想要的。什麼樣的行爲不是你喜歡的? – WiseTree

+1

每當需要loadabledetachablemodel時,它都會調用load方法,以便得到myService.getMyMethod()的結果。在這種情況下,我丟失了該模型中的「添加」和「刪除」對象,修改後的列表正在被myService.getMyMethod()的結果替換。無論如何,@svenmeier建議的解決方案對我來說工作得很好。謝謝 – Bilguun

回答

3

許多項目都使用自己的自定義實現這個用例:

public abstract class InitializingModel<T> extends AbstractReadOnlyModel<T> { 

    private boolean initialized; 
    private T t; 

    public T getObject() { 
     if (initialized == false) { 
      t = init(); 
      initialized = true; 
     } 
     return t; 
    } 

    protected abstract T init(); 
} 

注意,這將網頁和會話序列化過程中保持你的模型對象T,在頁面樹。

+0

謝謝@svenmeier,那是我一直在尋找的解決方案。 – Bilguun

+0

@svenmeier是否有這樣做的優勢,而不是重載'LoadableDetachableModel#detach()'不分離數據? – WiseTree

+0

恕我直言,覆蓋LDM使得難以推理你的代碼。 – svenmeier

相關問題