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 件のコメント:
コメントを投稿