Struts2フォーム要素とGWTの連携
画面中のGWT支配下のコントロールでStruts2のアクションを呼び出しは問題ないがやはりちょっとはStruts2のフォーム要素と関連を持たせたい場合がある。
たとえば、郵便番号から住所を引っ張ってくるAJAXを考えたときに、郵便番号フィールドはGWTで表示して、Struts2側の住所のフィールドに、入力された郵便番号に応じた住所を自動的に設定するような使い方が考えられる。
Struts2のフォーム要素との連携は GWTの JavaScript Native Interface (JSNI)を利用すると簡単に出来る。
Struts2側では特にすることはないが、簡単に要素が特定できるようにフォーム要素にIDを振ったほうがいいだろう。
IDを明示指定しないと、Struts2のルールによるIDが自動で振られるようだ、それを利用してもいい。
<s:textfield name="field" id="myformfld"/>
でGWT側で
public static native void SetJSValue( String name, String value ) /*-{ $doc.getElementById(name).value=value; }-*/;
というメソッドを用意してあげて
AJAXのコールバックとかで呼び出すようにしてあげればいい
AsyncCallback callback = new AsyncCallback() { public void onSuccess(Object result) { SetJSvalue("myformfld",result.toString()); } public void onFailure(Throwable caught) { Window.alert(caught.toString()); } };
これでOK。