Как вызвать код Java из кода JavaScript в Wicket?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
15
0
19 482
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

Или взгляните на DWR

http://directwebremoting.org/

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");

Стоит отметить, что в Wicket 1.5 изменился API для извлечения параметров. Вызвав RequestCycle.get().getRequest() для получения объекта Request, вы должны теперь вызвать getQueryParameters() (для параметров GET), getPostParameters() (для параметров POST) или getRequestParameters() (для всех сразу). Каждый возвращает экземпляр IRequestParameters, который можно запросить для параметров. См. документы API.

cooperised 13.03.2012 23:56

Да, и еще одна проблема: URL, возвращаемый getCallbackUrl(), может измениться во время цикла создания компонента. Часто бывает неточно, если вы пытаетесь использовать его в конструкторе, и в результате обратные вызовы не работают. Я успешно использовал его вместо onBeforeRender() компонента.

cooperised 13.03.2012 23:59

Другие вопросы по теме