2016-10-11 6 views
3

У меня проблема с странными шагами. Я Аякса ведут себя вынесенное Head Render StageWicket Странное поведение URL-адреса с ajax

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() + " + &undoEn=\"+e+\"\" });}"; 
     response.render(OnDomReadyHeaderItem.forScript(script)); 
    } 

Все хорошо работает в этом ведут себя называют каждый раз, когда узел изменен в редакторе TinyMCE

 settings.addCustomSetting(" setup: function(editor) {" + 
      "  editor.on('NodeChange', function(e) {" + 
      " editor.save();" + 
      getCallbackName() + "(editor.undoManager.hasUndo())" + 
      "  });" + 
      " }"); 

Но иногда, когда я оставить вкладку браузера, изменить несколько вкладок (хром) затем используйте другое приложение в течение нескольких минут и вернитесь на нашу вкладку, ajax url случайно появился в URL-адресе браузера.

http://localhost:8080/wicket/bookmarkable/com.tac.kulik.pages.SomePage?3-1.IBehaviorListener.0-contentPanel&entityId=2+++&undoEn=true 

это тоже довольно странно, что вместо normap параметра передать это ++++ признаки добавил

кстати этот sighns признан «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. 

и действительно по какой-то ссылке причина ведут себя имеет renderCount 1, но форма имеет 0. запрос от браузера JQuery-1.12.4-Ver-1476216952000.js: 10254 XHR завершения загрузки: GET " http://localhost:8080/wicket/bookmarkable/com.tac.pages.ca ...? 4-0.IBehaviorListener.0-ContentPanel & CardID = 1 & _ = 1476873175645 & undoEn = истина»

Я ве добавить некоторый набор JS, чтобы предотвратить cicling освежающий, но до сих пор i'we имеет исключение Stale

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

     } 
    }; 
+0

Вы разделывать обратный вызов URL, вставив "+" в него. Обратите внимание, что '+' - это закодированное пространство. – svenmeier

ответ

2

Вы должны переделать свое поведение вместо этого использовать динамические дополнительные параметры.

@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() + ";" + 
     " });" + 
     "}"); 
+0

По какой-то причине ваш код обновляет страницу бесконечности. В консольных журналах я вижу, что наш URL-адрес AJAX вызывает –

+0

Трудно сказать без отладчика или журналов. Является ли поведение неоднократно повторяющимся или обновляется вся страница? – svenmeier

+0

Целая страница освежает. –