2016-10-11 11 views
3

이상한 단계가있는 문제가 있습니다. 나는 아약스 단계를 렌더링 머리에 렌더링 다르게 동작 모든 것을 잘이 TinyMCE에 편집기에서 변경 때마다 노드라고 다르게 동작 작품Wicket 아약스가있는 URL의 이상한 동작

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

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

하지만 가끔은 내가 브라우저 탭을 떠날 때, 몇 가지 탭 (크롬)을 변경 몇 분 동안 다른 응용 프로그램을 사용하고 우리의 탭으로 돌아 가면 ajax url이 우연히 브라우저 URL에 나타납니다. 이 대신 normap 매개 변수는이 ++++ 징후이 "2"어떤 이유로 그렇게 인식 sighns 그런데

을 추가 패스하는 것이 매우 이상하다

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

'+'

을 공백으로 변경

업데이트 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 일이 있지만, 형태가 브라우저 JQuery와-1.12.4-버전-1476216952000.js에서 0 요청을 갖고와 : 10,254 XHR이 완료로드 : GET "

내가 상쾌한 cicling 방지하기 위해 JS의 일부 세트를 추가했습니다,하지만 여전히 i'we "http://localhost:8080/wicket/bookmarkable/com.tac.pages.ca ...? 4-0.IBehaviorListener.0-이 ContentPanel & cardId = 1 & _ = 1476873175645 & undoEn = TRUE 부실 예외가있다.

 "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

어떤 이유로 귀하의 코드는 무한대 페이지를 새로 고칩니다. 콘솔 로그에서 AJAX URL이 –

+0

디버거 또는 로그 없이는 어렵다고 알립니다. 반복적으로 동작이 호출되거나 페이지 전체가 새로 고침됩니까? – svenmeier

+0

전체 페이지 새로 고침. –