JBoss Seam Ajax Validation

JBoss SeamにおけるAjaxの非同期バリデーションは以下の要領で行います。


ローカルインターフェース

@Local
public interface NameCheck {
  @WebRemote
  public abstract boolean isExists(String name);

Stateless Session Bean

@Stateless
@Name("nameCheck")
public class NameCheckBean implements NameCheck {
    public boolean isExists(String name) {
        if (チェックする) {
            return false;
        } else {
            return true;
        }
    }
}

JSP(body部から抜粋)

<body>
<script type="text/javascript"
 src="seam/remoting/resource/remote.js"></script>
<script type="text/javascript"
 src="seam/remoting/interface.js?nameCheck"></script>
<script type="text/javascript">
// <![CDATA[
function checkName(i){
  s = i.value;
  Seam.Component.getInstance("nameCheck").isExist(s, checkNameCallBack);
}
function checkNameCallBack(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 value="#{hoge.name}" required="true"
        onblur="javascript:checkName(this)" />
    <span id="nameError"></span>
・・・ボタン等・・・
  </h:form>
</f:view>
</body>

web.xml(変更点)


  Seam Remoting
  
    org.jboss.seam.remoting.SeamRemotingServlet
  


  Seam Remoting
  /seam/remoting/*

これと同等な機能をTeedaAjaxを用いた場合として近日中に書きます。
# TeedaAjaxでの非同期バリデーション
これは、S2JSFにおいても有効だと思います。


Teedaにおいて、diconに登録したValidatorによって非同期バリデーション
する機能を提供しようとして、そのままになっていたので
SeasarConまでにはなんとか実装してサンプルを出したいと思います。