2008-10-02 4 views

Antwort

14

erk. Die richtige Antwort wäre Ajax Call Backs. Sie können die js entweder manuell codieren, um sie in das Wicket js einzubinden, oder Sie können die Callbacks von Wicket-Komponenten in Java einrichten. Zum Beispiel von AjaxLazyLoadPanel:

 component.add(new AbstractDefaultAjaxBehavior() { 

     @Override 
     protected void respond(AjaxRequestTarget target) { 
      // your code here 
     } 

     @Override 
     public void renderHead(IHeaderResponse response) { 
      super.renderHead(response); 
      response.renderOnDomReadyJavascript(getCallbackScript().toString()); 
     } 

     } 

Dieses Beispiel zeigt, wie Code auf jede Komponente in Wicket hinzuzufügen zurückrufen. Nachdem das Ereignis OnDomReady in Ihrem Browser ausgelöst wurde, wird Wicket beim Laden einer Seite veranlassen, dass es js enging aufruft, um mit Hilfe von Ajax den Code, der oben gezeigt wurde, wieder in Ihren Code einzufügen Server und möglicherweise Komponenten zu dem Ajax-Ziel hinzufügen, um erneut gerendert zu werden.

Um es manuell von js aus zu tun, können Sie sich in Wickets System einklinken, indem Sie getCallbackScript(). ToString() auf ein Attribut in einer Wicket-Komponente ausgeben, auf das Sie dann von js zugreifen können. Rufen Sie diese URL von js manuell mit wicket's wicketAjaxGet von wicket-ajax.js.

Schauen Sie sich die Mailingliste für das Los in der Konversation zu diesem Thema: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438

+9

die letzte Link funktioniert nicht –

0

Angenommen, Sie meinen, dass JavaScript auf dem Client ausgeführt wird - Sie veranlassen eine HTTP-Umleitung zum Server und lassen Ihr Servlet auf die Anfrage für die angegebene URL reagieren.

Dies ist bekannt als Ajax, und es gibt eine number von libraries, die Ihnen helfen, es zu tun ..

5

Auszug aus https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.html

Wenn Sie eine Klasse hinzufügen, die AbstractDefaultAjaxBehavior zu Ihrer Seite erstreckt, Wicket-ajax.js wird hinzugefügt zum Header Ihrer Webseite. Wicket-ajax.js Sie mit zwei grundlegenden Methoden bietet die Komponente zu nennen:

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel) 

und

function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel) 

Hier ist ein Beispiel:

JavaScript

function callWicket() { 
    var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { }); 
} 

$url$ ist erhalten aus der Methode abstractDefaultAjaxBehavior.getCallbackUrl(). Wenn Sie den von dieser Methode zurückgegebenen String in Ihren Browser einfügen, rufen Sie die Antwortmethode auf, das gleiche gilt für die JavaScript-Methode.

Sie können optional Argumente hinzufügen, indem Sie diese an die URL-Zeichenfolge anhängen. Sie nehmen die Form &foo=bar.

erhalten Sie die optionalen Argumente in der Java-Response-Verfahren wie folgt aus:

Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap(); 

oder dies:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo"); 
+1

Erwähnenswert, dass sich die API zum Extrahieren von Parametern in Wicket 1.5 geändert hat. Nachdem Sie 'RequestCycle.get(). GetRequest()' aufgerufen haben, müssen Sie 'getQueryParameters()' (für GET-Parameter), 'getPostParameters()' (für POST-Parameter) oder 'getRequestParameters aufrufen() '(für alle gleichzeitig). Jeder gibt eine IRequestParameters-Instanz zurück, die Sie nach Parametern abfragen können. Siehe [die API-Dokumentation] (http://wicket.apache.org/apidocs/1.5/). – cooperised

+0

Oh, und ein Gotcha: die URL, die von 'getCallbackUrl()' zurückgegeben wird, kann sich während des Bauzyklus der Komponente ändern. Es ist oft ungenau, wenn Sie versuchen, es im Konstruktor zu verwenden, und Callbacks werden daher fehlschlagen. Ich habe Erfolg damit gehabt, stattdessen die Komponente 'onBeforeRender()' zu überschreiben. – cooperised

Verwandte Themen