2016-06-15 1 views
1

Я использую компонент AjaxFallbackLink для ссылки Ajax. Когда я нажимаю на ссылку, URL-адрес выглядит примерно так ./myPage?1-1.ILinkListener-xxx. И когда я на самом деле нажимаю ссылку, запрос Ajax выглядит примерно так: ./myPage?1-1.IBehaviorListener-xxx.Wicket AjaxFallbackLink поведение

Кажется, что Wicket JavaScript каким-то образом изменил URL-адрес от ILinkListener до IBehaviorListener. Интересно, так ли это, и почему?

Иногда при определенных обстоятельствах ILinkListener в URL-адресе не изменяется на IBehaviorListener, когда запрос отправляется браузером, что приводит к тому, что NullPointerException как параметр AjaxRequestTarget в функции обратного вызова имеет значение null. Я не смог воспроизвести это. Просто задайтесь вопросом, какие настройки браузера могут привести к этому. Большое спасибо.

ответ

4

Оба этих URL-адреса верны.

Первый статическая ссылка Адрес './myPage?1-1.ILinkListener-xxx. '- общий адрес ссылки для ссылки, если он вызывает URL-адрес и обрабатывает ссылку.

Второй AJAX link адрес './myPage?1-1.IBehaviorListener-xxx' - это общее поведение JavaScript/AJAX. В случае, когда JavaScript работает, JavaScript привязан как событие onclick (см. Функцию jQuery click() в https://api.jquery.com/click/), и он обрабатывает ссылку, а затем не должен обрабатывать URL-адрес из атрибута HREF.

До сих пор вы ожидали запроса только одного из этих URL-адресов при нажатии ссылки. Но в случае AjaxFallbackLink, когда нет AJAX, тогда onClick (AjaxRequestTarget) вызывается как onClick (null), он вызывает NPE, если вы полагаетесь на существующий объект AjaxRequestTarget, но для этого нет никакой гарантии.

Последняя часть вашего вопроса непонятна, когда невозможно воспроизвести. Но Wicket использует jQuery, если вы добавляете библиотеку jQuery в HTML, существует возможный конфликт версий.

Есть еще некоторые детали на аналогичный вопрос в http://apache-wicket.1842946.n4.nabble.com/AjaxFallbackLink-s-onClick-with-null-AjaxRequestTarget-migrating-1-4-to-6-td4652143.html

+0

Спасибо Мартину. Как вы уже упоминали, в случае AjaxFallbackLink не может быть AJAX. И это как раз последняя часть моего вопроса, как это сделать в современном браузере, т. Е. AJAX, но JavaScript включен? На всякий случай вы знаете, как это сделать. – Yuci

+0

Это может быть вызвано различными проблемами, например. переопределить или дублировать ссылку на jQuery (JS-библиотеку) или заменить функцию onClick на вашу ссылку, если вы добавите другое поведение или остановите профагацию события JS или что-то в этом роде. Я бы проверял: 1) Есть ли только один jQuery в заголовке HTML, 2) Нет ли другого поведения в вашей ссылке ?, 3) Есть ли только одно событие onClick, прикрепленное в заголовке HTML к вашей ссылке? 4) Нет ли каких-либо общих событий onclick, связанных со всеми HTML-ссылками? –

+0

В моем случае ожидается поведение Ajax и действительно работает как ожидается во всех моих браузерах; но для некоторых пользователей вместо этого используется общая ссылка в соответствии с журналами доступа Tomcat. Таким образом, единственное различие в стороне браузера. Теперь я пытаюсь отключить Ajax, но с включенным JavaScript. Я вернусь к этому позже. – Yuci