TeedaAjax validation / JBoss Seam Ajax validation

http://d.hatena.ne.jp/yone098/20061101/1162388733
で紹介したJBoss Seam Ajax validationと同等処理をTeedaAjaxを使って試してみました。

NameCheckBean.java

public class NameCheckBean {
    public boolean isExists(String name) {
        if ("hoge".equals(name)) {
            return true;
        } else {
            return false;
        }
    }
}

特にアノテーションの記述は無く、単純なPOJOです(hogeという入力値ならtrueを返すだけ)
このNameCheckBeanを"nameCheckBean"という名前でdiconファイルに登録します。

<component name="nameCheckBean" class="examples.teeda.ajax.NameCheckBean" instance="request">
  <meta name="teeda-ajax"/>
</component>

JSP(body部から抜粋)

<body>
<script language="JavaScript" src="../js/kumu/ajax.js"></script>
<script type="text/javascript">
// <![CDATA[
function checkName(i){
  s = i.value;
  Kumu.Ajax.executeTeedaAjax(nameCheckBean_isExists, [s]);
}
function nameCheckBean_isExists(result){
  if(result){
    document.getElementById("nameError").innerHTML
      = '<span style="color:red;">This name is already regist</span>';
  }else{
    document.getElementById("nameError").innerHTML='';
  }
}
// ]]>
</script>
<f:view>
  <h:form>
    <h:inputText id="name" required="true"
        onblur="javascript:checkName(this);" />
    <span id="nameError"></span>
    <br/>
    <h:commandButton value="test" />
  </h:form>
</f:view>
</body>

ここで注目して欲しいのは、TeedaAjaxにおいてCallback関数の命名規約は
"呼び出したいコンポーネント名" + "_" + "コンポーネントメソッド名"になっているところです。
前述のdiconファイルに登録した名前 : nameCheckBean
NameCheckBeanの呼び出し対象メソッド : isExists

web.xml(変更点)

<servlet>
  <servlet-name>AjaxServlet</servlet-name>
  <servlet-class>org.seasar.teeda.ajax.AjaxServlet</servlet-class>
  <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>AjaxServlet</servlet-name>
  <url-pattern>*.ajax</url-pattern>
</servlet-mapping>

web.xmlの変更点や、コールバックバック関数内の実装はほぼ同じですが
Ajax呼び出し部が異なっていて、違いをまとめると

JBoss Seam
■ローカルインターフェースの作成(@Local, @WebRemoteアノテーション付与)
■Stateless Session Beanの作成(@Stateless, @Name("nameCheck")アノテーション付与)
■remote.js, iterface.jsをload(interface.jsにはnameCheckパラメータを渡す)

TeedaAjax
■呼び出したいcomponentをdiconファイルに登録(metaタグ指定)
■ajax.jsをload
■callback関数名は、呼び出したいcomponent名 + "_" + 呼び出したいメソッド名 とする。

JBoss Seamのサンプルにあわせる為に、今回はJSPで試しましたが
TeedaAjaxはS2JSFS2Struts、TeedaExtensionでも利用可能です。


TeedaAjaxにおいて、既存のJSFのValidatorの資産をTeedaAjaxによって
呼び出せるような機能も書いていきます。