2011年8月1日月曜日

ZK: JavaScriptからJavaコントローラのメソッドをコールする

JavaScriptからコントローラ内のJavaメソッドをコールするときは、JavaScript内で親コンポーネントに対しイベントを送り、親コンポーネントのイベントハンドラでコールしたいJavaメソッドを呼び出すようにします。

  • サーバにイベントを送るJavaScript関数

    function callJavaMethod(){
    zAu.send(new zk.Event(zk.Widget.$(this), 'onLinkClicked', 'Parameter'));
    }

    zk.Widget.$(this) => 親コンポーネント(この場合は "rootwindow"を指す)
    'onLinkClicked' => 送出するイベントを処理するコントローラのイベントハンドラメソッド名
    'Parameter' => イベントハンドラへ渡すパラメータ。(オプション)
    ※イベントハンドラ内で Event event を ForwardEventにキャストし
    getOrigin().getData()でパラメータの値を取得できる。



  • JavaScriptから送出されたイベントのイベントハンドラメソッド

    public void onLinkClicked$rootwindow(Event event){
    someJavaMethod();
    }



    --- zul ---
    <window id="rootwindow"
    title="JavaScriptからJavaコントローラのメソッドをコールする" border="normal"
    apply="zkexamples.calljavafromjavascript.ViewController">
    <html><![CDATA[
    <script type="text/javascript">
    function callJavaMethod(){
    zAu.send(new zk.Event(zk.Widget.$(this), 'onLinkClicked', 'Parameter'));
    }
    </script>
    <a href="#" onClick="callJavaMethod();">Click me</a>
    ]]></html>
    </window>


    --- java ---
    public class ViewController extends GenericForwardComposer {

    // JavaScriptからイベントハンドラを経由してコールされるコントローラのメソッド
    private void callMe() {
    alert("Hello JavaScript, this is Java!");
    }

    // コントローラのイベントハンドラ名の最後に親コンポーネント名をつけること忘れないこと!!
    public void onLinkClicked$rootwindow(Event event){
    ForwardEvent fevent = (ForwardEvent)event;
    System.out.println(fevent.getOrigin().getData());
    callMe();
    }
    }
  • 0 件のコメント: