Come posso chiamare il codice Java dal codice JavaScript in Wicket?
-
03-07-2019 - |
Domanda
Se posso farlo, come posso chiamare il codice Java (metodi per esempio) dall'interno del codice JavaScript, in Wicket.
Soluzione
ERK. La risposta corretta sarebbe ajax callbacks. Puoi codificare manualmente js per agganciarlo a wicket js, oppure puoi impostare i callback da componenti wicket in java. Ad esempio, da 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() );
}
}
Questo esempio mostra come aggiungere il codice di richiamata a qualsiasi componente in Wicket. Dopo che l'evento OnDomReady si attiva nel tuo browser, durante il caricamento di una pagina, Wicket causerà il suo js enging, richiamando nel tuo codice, usando Ajax, il metodo "rispondi" mostrato sopra, a quel punto puoi eseguire il codice Java sul server e potenzialmente aggiungere componenti alla destinazione ajax per il rendering di nuovo.
Per farlo manualmente, da js, puoi agganciarlo al sistema wicket stampando getCallbackScript (). toString () su un attributo su un componente wicket, a cui potrai accedere da js. Chiamare questo url da js manualmente con wicket's wicketAjaxGet da wicket-ajax.js.
Controlla la mailing list per molte conversazioni su questo argomento: http://www.nabble.com/Wicket-and-javascript-ts24336438 .html # a24336438
Altri suggerimenti
Estratto da https://cwiki.apache.org/WICKET/ chiamando wicket-da-javascript.html
Se aggiungi una classe che estende AbstractDefaultAjaxBehavior alla tua pagina, wicket-ajax.js verrà aggiunto all'intestazione della tua pagina web. wicket-ajax.js ti offre due metodi di base per chiamare il tuo componente:
function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel)
e
function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel)
Ecco un esempio:
JavaScript
function callWicket() {
var wcall = wicketAjaxGet('$url
$ url $
è ottenuto dal metodo abstractDefaultAjaxBehavior.getCallbackUrl ()
. Se incolli la stringa restituita da quel metodo nel tuo browser, invocherai il metodo di risposta, lo stesso vale per il metodo javascript.
Puoi facoltativamente aggiungere argomenti aggiungendoli alla stringa URL. Prendono la forma & amp; foo = bar
.
ottieni gli argomenti opzionali nel metodo di risposta Java in questo modo:
Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap();
o questo:
String paramFoo = RequestCycle.get().getRequest().getParameter("foo");
+ '$args
$ url $
è ottenuto dal metodo abstractDefaultAjaxBehavior.getCallbackUrl ()
. Se incolli la stringa restituita da quel metodo nel tuo browser, invocherai il metodo di risposta, lo stesso vale per il metodo javascript.
Puoi facoltativamente aggiungere argomenti aggiungendoli alla stringa URL. Prendono la forma & amp; foo = bar
.
ottieni gli argomenti opzionali nel metodo di risposta Java in questo modo:
<*>
o questo:
<*>, function() { }, function() { });
}
$ url $
è ottenuto dal metodo abstractDefaultAjaxBehavior.getCallbackUrl ()
. Se incolli la stringa restituita da quel metodo nel tuo browser, invocherai il metodo di risposta, lo stesso vale per il metodo javascript.
Puoi facoltativamente aggiungere argomenti aggiungendoli alla stringa URL. Prendono la forma & amp; foo = bar
.
ottieni gli argomenti opzionali nel metodo di risposta Java in questo modo:
<*>o questo:
<*>http: //www.wicket-library. com / wicket-esempi-6.0.x / index.html / ha molti esempi per iniziare.
O dai un'occhiata a DWR
DWR consente a Javascript in un browser di interagire con Java su un server e ti aiuta a manipolare le pagine web con i risultati.
Come detto da Dorward, questo viene fatto tramite AJAX