Если я могу это сделать, как мне вызвать код Java (например, методы) из кода JavaScript в Wicket.




Предполагая, что вы имеете в виду JavaScript, запущенный на клиенте, вы вызываете перенаправление HTTP на сервер, и ваш сервлет реагирует на запрос данного URL.
Это известно как Аякс, и есть количество из библиотеки, которые помогут вам в этом ..
У http://www.wicket-library.com/wicket-examples-6.0.x/index.html/ есть множество примеров, которые помогут вам начать работу.
Или взгляните на DWR
DWR позволяет Javascript в браузере взаимодействовать с Java на сервере и помогает управлять веб-страницами с результатами.
Как упоминал Дорвард, это делается через AJAX
эрк. Правильный ответ - обратный вызов ajax. Вы можете либо вручную закодировать js для подключения к js калитки, либо настроить обратные вызовы из компонентов калитки в java. Например, из 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() );
}
}
В этом примере показано, как добавить код обратного вызова к любому компоненту в Wicket. После того, как событие OnDomReady сработает в вашем браузере, при загрузке страницы Wicket вызовет его js enging для обратного вызова в ваш код, используя Ajax, методу ответа, показанному выше, после чего вы можете выполнить код Java на server и, возможно, добавить компоненты к цели ajax для повторной визуализации.
Чтобы сделать это вручную из js, вы можете подключиться к системе калитки, распечатав getCallbackScript (). ToString () в атрибуте компонента калитки, к которому вы затем сможете получить доступ из js. Вызов этого URL-адреса из js вручную с помощью wicketAjaxGet из wicket-ajax.js.
Просмотрите список рассылки, где много разговоров на эту тему: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438
Отрывок из https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.html
Если вы добавите какой-либо класс, расширяющий AbstractDefaultAjaxBehavior на вашу страницу, wicket-ajax.js будет добавлен в заголовок вашей веб-страницы. wicket-ajax.js предоставляет вам два основных метода вызова вашего компонента:
function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel)
и
function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel)
Вот пример:
JavaScript
function callWicket() {
var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { });
}
$url$ получают по методу abstractDefaultAjaxBehavior.getCallbackUrl(). Если вы вставите строку, возвращенную этим методом, в свой браузер, вы вызовете метод ответа, то же самое относится и к методу javascript.
При желании вы можете добавить аргументы, добавив их в строку URL-адреса. Они имеют вид &foo=bar.
вы получаете необязательные аргументы в методе ответа Java следующим образом:
Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap();
или это:
String paramFoo = RequestCycle.get().getRequest().getParameter("foo");
Да, и еще одна проблема: URL, возвращаемый getCallbackUrl(), может измениться во время цикла создания компонента. Часто бывает неточно, если вы пытаетесь использовать его в конструкторе, и в результате обратные вызовы не работают. Я успешно использовал его вместо onBeforeRender() компонента.
Стоит отметить, что в Wicket 1.5 изменился API для извлечения параметров. Вызвав
RequestCycle.get().getRequest()для получения объектаRequest, вы должны теперь вызватьgetQueryParameters()(для параметров GET),getPostParameters()(для параметров POST) илиgetRequestParameters()(для всех сразу). Каждый возвращает экземплярIRequestParameters, который можно запросить для параметров. См. документы API.