autocomplete例

script.aculo.usのautocompleteを利用していたが、
・変換前の文字列で保管してくれない
・自作タグライブラリでautocompleteを呼び出そうとすると、若干ソースが煩雑になる
の2点からライブラリをGoogle Closure に変えました。

使い方は下記の通り

 http://code.google.com/intl/ja/closure/から
 Google closureをチェックアウトする

 <html>
  <head>
   ・・・略・・・
   <link rel="stylesheet" type="text/css" href="/test/css/autocomplete.css" />
   <script type="text/javascript" src="/test/js/goog/base.js"></script>
   <script type="text/javascript">
    goog.require('goog.ui.AutoComplete.Remote');
   </script>
   ・・・略・・・
  <body>
   ・・・略・・・
    &lt;input type="text" id="aaa" name="aaa" autocomplete="off" value="" id="aaa" /&gt;
    &lt;script type="text/javascript"&gt;
     new goog.ui.AutoComplete.Remote('/test/autoComplete/autocompletetest/',document.getElementById('aaa'));
    </script>
    ・・・略・・・
  </body>
 </html>

SAStrutsのAutoCompleteAction

 @Execute(validator = false)
 public String autocompletetest() {
  //入力途中のデータはtokenパラメータで取得可能
  String token = request.getParameter("token");
  //[aa,bb,cc]という文字列を返却する必要あり
  //今回はtokenを最後につなげて返してみた。
  //実際はDBに問い合わせて結果を返す。
  String str = "["
        + "aaaa,"
        + "bbbb,"
        + "cccc,"
        + "dddd,"
        + token
        + "]";
  ResponseUtil.write(str);
  return null;
 }

変換前の文字列でもサーバーに問い合わせてくれるので非常に速い印象を受けます。
多分suggestのようにjavascriptのtimerを利用して取得しているのでしょう。
大満足。