Struts2フォーム要素とGWTの連携

画面中のGWT支配下のコントロールStruts2のアクションを呼び出しは問題ないがやはりちょっとはStruts2のフォーム要素と関連を持たせたい場合がある。
たとえば、郵便番号から住所を引っ張ってくるAJAXを考えたときに、郵便番号フィールドはGWTで表示して、Struts2側の住所のフィールドに、入力された郵便番号に応じた住所を自動的に設定するような使い方が考えられる。

Struts2のフォーム要素との連携は GWTJavaScript 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。