Как мне вызвать код Java из кода JavaScript в Wicket? - PullRequest
16 голосов
/ 02 октября 2008

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

Ответы [ 4 ]

14 голосов
/ 18 июля 2009

эрк. Правильный ответ - обратные вызовы Ajax. Вы можете либо вручную кодировать js для подключения к wicket js, либо вы можете настроить обратные вызовы из компонентов wicket в 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 будет вызывать ее вызов в ваш код, используя Ajax, для метода «ответ», показанного выше, после чего вы сможете выполнить код Java на сервера и, возможно, добавьте компоненты к цели ajax для повторного рендеринга.

Чтобы сделать это вручную, из js вы можете подключиться к системе wicket, распечатав getCallbackScript (). ToString () к атрибуту компонента wicket, к которому вы затем сможете обращаться из js. Вызов этого URL-адреса из js вручную с помощью wicketAjaxGet от wicket-ajax.js.

Посмотрите список рассылки, чтобы обсудить эту тему: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438

5 голосов
/ 26 августа 2010

Выдержка из 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(). Если вы вставите строку, возвращенную этим методом, в свой браузер, вы вызовете метод reply, то же самое относится и к методу javascript.

Вы можете добавить аргументы, добавив их в строку URL. Они принимают форму &foo=bar.

вы получаете необязательные аргументы в методе ответа Java, такие как:

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

или это:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo");
4 голосов
/ 02 октября 2008

http://www.wicket -library.com / wicket-examples-6.0.x / index.html / содержит множество примеров, которые помогут вам в этом.

Или посмотрите DWR

http://directwebremoting.org/

DWR позволяет Javascript в браузере взаимодействовать с Java на сервере и помогает вам манипулировать веб-страницами с результатами.

Как отметил Дорвард, это делается через AJAX

0 голосов
/ 02 октября 2008

Предполагая, что вы имеете в виду JavaScript, выполняющийся на клиенте, - вы заставляете HTTP-перенаправление на сервер, и ваш сервлет реагирует на запрос данного URL.

Это известно как Ajax , и существует число из библиотек , которые помогут вам сделать это ..

...