2017-02-21 2 views
0

Wicket의 Javascript에서 Java 코드를 호출하려고합니다.자바 스크립트 Wicket 코드 호출

이 내 자바 코드 :

public ShowUnternehmen() { 

    add(new AbstractDefaultAjaxBehavior() { 
     @Override 
     protected void respond(AjaxRequestTarget ajaxRequestTarget) { 
      System.out.println("respond"); 
     } 

     @Override 
     public void renderHead(Component component, IHeaderResponse response) { 
      super.renderHead(component, response); 
      System.out.println(getCallbackUrl()); 
     } 
    }); 

}

그리고 이것은 자바 스크립트 코드 :

<wicket:head> 
    <script type="text/javascript" > 
     $(function() { 
      $.contextMenu({ 
       selector: '.context-menu-one', 
       callback: function(key, options) { 
        var m = "clicked: " + key; 
        alert("BLA"); 
        Wicket.Ajax.get({"u":"./com.emg.panels.unternehmen.ShowUnternehmen?1-1.IBehaviorListener.0-"}) 
       }, 
       items: { 
        "edit": {name: "Editieren", icon: "edit"}, 
        "quit": {name: "Abbrechen", icon: function(){ 
         return 'context-menu-icon context-menu-icon-quit'; 
        }} 
       } 
      }); 

      $('.context-menu-one').on('click', function(e){ 
       console.log('clicked', this); 
      }) 
     }); 
    </script> 
</wicket:head> 

그러나 응답 방법은 실행되지 않습니다. 다른 예제를 보았지만 모두 혼란스러워 보입니다.

내가 자바를 실행하는 데 renderHead 방법

+0

자바 스크립트에서 일부 java/wicket 코드를 실행하고 트리거 할 수 있기를 원하십니까? 아니면 자바 스크립트 호출에서 얻은 응답을 처리해야합니까? 첫 번째 경우에는 이것을 달성 할 수있는 쉬운 방법을 알게 될 것입니다. –

+0

첫 번째 사례는 나에게 도움이 될 것입니다. – user2529173

답변

2

좋은 방법입니다. wicket이 콜백 함수를 페이지에 렌더링하도록하면 더 신뢰할 수 있습니다. 다음 두 예제는이를 수행하는 방법을 보여줍니다.

가) 글로벌 콜백 기능을 렌더링합니다. 단점은 단 하나의 콜백 엔드 포인트를 갖게된다는 것입니다.

(1) 다음처럼 행동 만들기 :

public class CallFromJavascriptBehavior extends AbstractDefaultAjaxBehavior { 
@Override 
protected void respond(AjaxRequestTarget target) { 
    final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName"); 
    System.out.println(String.format("Hello %s", parameterValue.toString())); 
} 

@Override 
public void renderHead(Component component, IHeaderResponse response) { 
    super.renderHead(component, response); 
    response.render(JavaScriptHeaderItem.forScript(String.format("nameOfFunction=%s", getCallbackFunction(CallbackParameter.explicit("yourName"))), "CallFromJavascriptBehavior")); 
}} 

(2) 귀하의 개찰구 페이지로이 동작을 추가합니다.

(3) 이제 nameOfFunction ('Markus')를 호출 할 수 있습니다. 귀하의 자바 스크립트에서.

B) 페이지에서 구성 요소의 각 인스턴스에 대한 초기화 함수를 호출하십시오.

(1) (2) 초기화 함수를 호출하고 필요한 선택 및 콜백 기능을 전달하는 다음과 같은 동작을 만들기 페이지

<script> 
    function initMyComponent(selector, callback){ 
     $(selector).click(function(){ 
      callback("Markus"); 
     }); 
    } 
</script> 

에 초기화 기능을 추가 할 수 있습니다.

public class ComponentBehavior extends AbstractDefaultAjaxBehavior{ 
@Override 
protected void respond(AjaxRequestTarget target) { 
    final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName"); 
    System.out.println(String.format("Hello %s", parameterValue.toString())); 
} 

@Override 
public void renderHead(Component component, IHeaderResponse response) { 
    super.renderHead(component, response); 
    response.render(OnDomReadyHeaderItem.forScript(String.format("initMyComponent('#%s', %s)", component.getMarkupId(), getCallbackFunction(CallbackParameter.explicit("yourName"))))); 
}} 

(3) 위젯 구성 요소에 동작을 추가하십시오.

응답 방법이 호출되지 않으면 다른 이유가있을 수 있습니다. 먼저 콘솔 (ide 및 브라우저)을 확인해야합니다.

1

쉬운 방법에서이 URL을 가지고/자바 스크립트에서 개찰구 코드는 후크와 같은 이벤트 행동 숨겨진 입력을 사용하는 것입니다.

숨겨진 입력은 "보이지 않는"양식 요소이지만이 경우에는 매우 유용 할 수 있습니다.

설정 개찰구 구성 요소

먼저 우리는 내가 사용하는 우리의 개찰구 페이지에에 HiddenField를 추가하고에게 AjaxEventBehavior

final HiddenField<Void> hiddenInput = new HiddenField<>("hiddenInput"); 
add(hiddenInput); 
hiddenInput.add(new AjaxEventBehavior("change") { 

    @Override 
    protected void onEvent(final AjaxRequestTarget target) { 
     // Execute any code you like and respond with an ajax response 
     target.appendJavaScript("alert('Hidden Input Change Event Behaviour!');"); 
     } 
}); 

을 제공

그 예로 자바 스크립트에 경보에서 System.out.println의 힘 때문에 일부 로거 시스템에서는 무시됩니다. 나는 다른 사람들이 잘 작동 할지라도 변화 이벤트를 사용했다.

대응하는 HTML 마크 업 :

<input type="hidden" wicket:id="hiddenInput" id="hiddenInput1"/> 

참고 : 내가 입력을 고정 id 값을 주었다. ID는 모든 페이지에서 고유해야하므로 Wicket 패널로 만들 수 없으며 여러 번 페이지에 추가 할 수 없습니다. 개찰구가 ids (setOutputMarkupId(true))를 만들고 나서 자바 스크립트에 ID를 전달하는 방법을 찾아야합니다. 그러나이 아주 간단한 예를 들어 이것은 충분할 것입니다. 자바 스크립트

트리거 이제 당신이해야 할 모든 숨겨진 입력을 변경 이벤트를 트리거하고 당신이의 onEvent 방법에 정의 된 코드를 실행하는 것입니다. JQuery와 및 ID가

,이이며 매우 간단하다 :이 간단한 예를 들어 당신이 아이디어를 얻을하는 데 도움이

<script> 
    $('#hiddenInput1').change(); 
</script> 

희망. 내가 이미 내 의견에 말했듯이 이것은 자바 스크립트 호출이 응답을 필요로하지 않고 자바 스크립트에서 개찰 코드를 트리거 할 수 있기를 원할 때 유용합니다.