[ 2310 ] [Struts2] AJAXタグ : autocompleter と JSONプラグイン
バージョンは2.0.9。
オートコンプリータとは、いわゆるコンボボックスと同じ使い方ができます。
名前を聞くと間違えそうですが…
ブラウザのオートコンプリートは、入力フォームでクリックすると、過去入力さ
れた値を出してくれる機能ですが、
struts2のオートコンプリータは、コンボボックス(テキスト入力可能なプルダウン)と、
AJAX対応なので、リフレッシュ機能を搭載することができます。
なので、複数のプルダウンを構成して、ひとつを選んだら、
もう一方の内容を再検索して表示…といったことが手軽にできます。
必要なもの
Struts2-JSONプラグイン(mavenでは取得できません。2008/1/28)
※http://code.google.com/p/jsonplugin/downloads/list
現在は0.21です。稼働確認をしたのは0.19です。
これをWEB-INF/libに入れておきましょう。
※入れておかないと、JSONを使ったActionをstruts.xmlからresultの値が
読み込めなくなるようです。
使い方
以下、使い方です。
Struts2公式のTag-Reference/AJAXのサンプル定義集でも書かれています。
struts.xml
JSON経由で取得する情報を定義します。
<package name="autoCompleter" namespace="/" extends="json-default">
<action name="getKoma" class="jp.net.seren.sample.action.JSONSampleAction">
<result type="json">
<param name="root">options</param>
</result>
</action>
</package>
これで、getKoma.action→JSONで値を取得できるようになります。
取得するプロパティ名(メソッド名)はoptionsです。
JSP
先ほどのstruts.xmlから、JSON経由でコンボボックスの内容を取得します。
<s:url id="optionsUrl" namespace="/" action="getKoma" />
<s:autocompleter href="%{#optionsUrl}" />
namespaceとactionの値は、struts.xmlにあわせましょう。
Actoinクラス~
JSON経由で返却する値を作成します。
ここでは単に、Actionクラスで直接値を返します。
public class JSONSampleAction extends ActionSupport {
public static final Logger log = Logger.getRootLogger();
public String execute() throws Exception {
log.debug("+ JSON Action execute +");
return "success";
}
/**
* JSONから呼び出されるアクション。
* @return
*/
public List<String> getOptions() {
List<String> options= new ArrayList<String>();
options.add("歩");
options.add("香");
options.add("桂馬");
options.add("銀");
options.add("金");
options.add("角行");
options.add("飛車");
options.add("王");
log.debug("* getOptions *");
return options;
}
}
Actionクラス側の動き
JSONで値が要求されると、execute()が起動→該当メソッドの取得となるので、
他のアクションクラスの中にJSON用の処理を追加するといったことはしません。
※誤動作の原因ですね(・ω・)
これで、コンボボックスが表示されます。