2016-07-29 2 views
0

loadableDetachableModelを使用していくつかのコンポーネントを表示していますが、loadメソッドで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; 
}}; 

あなたは私のために何か提案はありますか?これはページとセッションのシリアル化中にページツリーであなたのモデルオブジェクトのTを維持すること

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(); 
} 

注:感謝

+0

私はちょっと混乱しています。「LoadableDetachableModel」はまさにあなたが望むものと思われます。あなたの好きなものではないのはどんな振る舞いですか? – WiseTree

+1

loadableetachablemodelが必要なときはいつでも、私はmyService.getMyMethod()の結果を得るためにloadメソッドを呼び出します。この場合、そのモデルから「追加」および「削除」されたオブジェクトが失われていましたが、変更されたリストはmyService.getMyMethod()の結果に置き換えられました。とにかく、@ svenmeierが提案した解決策は、私のためにうまくいった。ありがとう – Bilguun

答えて

3

多くのプロジェクトは、このユースケースのために彼らのカスタム実装を使用します。

+0

私が探していた解決策だった@svenmeierありがとうございました。 – Bilguun

+0

@svenmeierは、データをデタッチしないように 'LoadableDetachableModel#detach()'をオーバーライドするのではなく、このようにするのに利点がありますか? – WiseTree

+0

IMHOがLDMを上書きすると、あなたのコードについて推論するのが難しくなります。 – svenmeier

関連する問題