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はS2JSFやS2Struts、TeedaExtensionでも利用可能です。
TeedaAjaxにおいて、既存のJSFのValidatorの資産をTeedaAjaxによって
呼び出せるような機能も書いていきます。