[ 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用の処理を追加するといったことはしません。
※誤動作の原因ですね(・ω・)

これで、コンボボックスが表示されます。

*****