2016-07-29 20 views
0

Ich benutze ladableDetachableModel, um einige Komponenten anzuzeigen, und es ruft die Daten, die ich wollte, zuerst durch den Aufruf von Webservice in load-Methode. Aber Benutzer führen einige Operationen wie Einfügen oder Löschen zu diesem Modell durch. Ich möchte diesen Webservice nicht zum ersten Mal aufrufen. So seiSo bearbeiten Sie LoadableDetachableModel in Apache Wicket

der Code wie:

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

Haben Sie irgendwelche Vorschläge für mich? Dank

+0

Ich bin ein bisschen verwirrt - 'LoadableDetachableModel' scheint genau das zu sein, was Sie wollen. Welches Verhalten ist es nicht, was du magst? – WiseTree

+1

Immer wenn dieses ladbare detachabemodel benötigt wird, ruft es load method auf, so dass ich das Ergebnis von myService.getMyMethod() erhalten würde. In diesem Fall verlor ich "hinzugefügt" und "entfernte" Objekte aus diesem Modell, eine modifizierte Liste wurde durch das Ergebnis von myService.getMyMethod() ersetzt. Wie auch immer, eine Lösung, die @svenmeier vorgeschlagen hat, funktionierte gut für mich. Danke – Bilguun

Antwort

3

Viele Projekte verwenden, um ihre individuelle Umsetzung für diesen Anwendungsfall:

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

Beachten Sie, dass dies Ihr Modellobjekt T im Seitenbaum während der Serialisierung von Seiten und Sitzungen zu halten.

+0

Danke @svenmeier, das war die Lösung, nach der ich gesucht habe. – Bilguun

+0

@svenmeier ist es ein Vorteil, es auf diese Weise zu tun im Gegensatz zu überschreiben 'LoadableDetachableModel # detach()' nicht die Daten zu lösen? – WiseTree

+0

IMHO überschreiben LDM macht es schwieriger, über Ihren Code nachzudenken. – svenmeier