#javascript #ajax #wicket #wicket-7
#javascript #ajax #калитка #калитка-7
Вопрос:
У меня проблема, которая имеет странные шаги. У меня есть поведение ajax, отображаемое на этапе рендеринга Head
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
boolean undoEn = getRequest().getQueryParameters().getParameterValue("undoEn").toBoolean();
if (undoEn) {
mSaveButton.setEnabled(true);
target.add(mSaveButton);
}
}
};
public String getCallbackName() {
return "saveButtonVisibilityToggle";
}
@Override
public void renderHead(IHeaderResponse response) {
String script = getCallbackName() " = function (e) { Wicket.Ajax.ajax({"u": "" behave.getCallbackUrl() " amp;undoEn=" e "" });}";
response.render(OnDomReadyHeaderItem.forScript(script));
}
Все работает хорошо, это поведение вызывается каждый раз, когда узел изменяется в редакторе TinyMCE
settings.addCustomSetting(" setup: function(editor) {"
" editor.on('NodeChange', function(e) {"
" editor.save();"
getCallbackName() "(editor.undoManager.hasUndo())"
" });"
" }");
Но иногда, когда я покидаю вкладку браузера, меняю несколько вкладок (chrome), затем использую другое приложение в течение нескольких минут и возвращаюсь к нашей вкладке, URL-адрес ajax случайно появляется в URL-адресе браузера.
http://localhost:8080/wicket/bookmarkable/com.tac.kulik.pages.SomePage?3-1.IBehaviorListener.0-contentPanelamp;entityId=2 amp;undoEn=true
также довольно странно, что вместо передачи параметра normap добавлены знаки
кстати, этот сигнал распознается как «2», поэтому по какой-то причине ‘ ‘ заменен на пробел
ОБНОВЛЕНИЕ 1 С помощью ответа @svenmeier я обновил бесконечный цикл запуска страницы. с журналами
org.apache.wicket.core.request.mapper.StalePageException: A request to
page '[Page class = x.x.x.CardPage, id = 25, render count = 1]' has been
made with stale 'renderCount'. The page will be re-rendered.
и действительно, по какой-то причине behave link имеет значение renderCount 1, но форма имеет 0.
запрос из браузера
jquery-1.12.4-ver-1476216952000.js: 10254 XHR завершил загрузку: ПОЛУЧИТЬ «http://localhost:8080/wicket/bookmarkable/com.tac.pages.ca…?4-0 .IBehaviorListener.0-ContentPanelamp;CardID=1amp;_=1476873175645amp;Отменить = true»
Я добавил некоторый набор JS, чтобы предотвратить циклическое обновление, но у меня все еще есть устаревшее исключение
"if (editor.undoManager.hasUndo()) { "
" console.debug('Behave called ');"
behave.getCallbackScript()
" }"
это мое поведение
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
log.info("Behave called");
boolean undoEn = getRequest().getQueryParameters().getParameterValue("undoEn").toBoolean();
if (undoEn) {
mSaveButton.setEnabled(true);
target.add(mSaveButton);
}
}
//
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
String undoEn = "return {'undoEn': editor.undoManager.hasUndo()};";
attributes.getDynamicExtraParameters().add(undoEn);
}
};
И нет никакой разницы, это может быть поведение без какой-либо реализации, поведение страницы такое же ((
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
@Override
protected void respond(AjaxRequestTarget target) {
}
};
Комментарии:
1. Вы уничтожаете URL обратного вызова, вставляя в него » «. Обратите внимание, что
это закодированное пространство.
Ответ №1:
Вы должны переработать свое поведение, чтобы вместо этого использовать динамические дополнительные параметры.
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
{
super.updateAjaxAttributes(attributes);
String undoEn = "return {'undoEn': editor.undoManager.hasUndo()}";
attributes.getDynamicExtraParameters().add(undoEn);
}
И:
settings.addCustomSetting(
"setup: function(editor) {"
" editor.on('NodeChange', function(e) {"
" editor.save();"
" " getCallbackScript() ";"
" });"
"}");
Комментарии:
1. По какой-то причине ваш код добавляет обновление страницы infinity. В журналах консоли я вижу, что наш AJAX url вызывает
2. Трудно сказать без отладчика или журналов. Вызывается ли поведение повторно или обновляется вся страница?
3. Обновляется вся страница.
4. org.apache. исключение wicket.core.request.mapper.StalePageException: запрос на страницу ‘[Класс страницы = x.x.x.CardPage, id = 25, количество отображений = 1]’ был выполнен с устаревшим ‘renderCount’. Страница будет повторно отображена.
5. чтобы предотвратить повторное обновление страницы, я удалил первый вызов (пока текст / модель) все еще не загружен в редактор) «if (editor.UndoManager.hasUndo()) { » » console.debug(‘Behave called ‘);» behave.getCallbackScript() // «;» » }»