ひがやすを技術ブログ

電通国際情報サービスのプログラマ

SAStrutsでクライアントサイドバリデーション

SAStrutsでクライアントサイドバリデーションは次のようにして行ないます。
今回は、最初のサブミットボタンを押すと、aaaのみが必須チェックがかかり、次のボタンを押すとbbbのみが必須チェックがかかるサンプルで説明します。
ClientValidatorAction.javaソースコードは次のようになります。

ClientValidatorAction.java

package tutorial.action;

import org.seasar.struts.annotation.Execute;
import org.seasar.struts.annotation.Required;

public class ClientValidatorAction {

@Required(target = "submit")
public String aaa;

@Required(target = "submit2")
public String bbb;

@Execute(validator = false)
public String index() {
return "clientValidator.jsp";
}

@Execute(validator = true, input = "clientValidator.jsp")
public String submit() {
return "clientValidator.jsp";
}

@Execute(validator = true, input = "clientValidator.jsp")
public String submit2() {
return "clientValidator.jsp";
}
}

ボタン(メソッド)ごとに対象となるバリデータを変えたい場合、バリデータ用のアノテーションのtarget属性にメソッドの名前を指定します。複数のメソッドを指定したい場合は、カンマ(,)で区切ってください。
clientValidator.jspは次のようになります。
clientValidator.jsp

<html>
<head>
<title>Client Validator</title>
<html:javascript formName="clientValidatorActionForm_submit"/>
<html:javascript formName="clientValidatorActionForm_submit2"/>
</head>
<body>
<html:errors/>
<s:form action="/clientValidator">
aaa:<html:text property="aaa"/><br />
bbb:<html:text property="bbb"/><br />
<input type="submit" name="submit" value="aaaが必須"
onclick="forms[0].name='clientValidatorActionForm_submit';
return validateClientValidatorActionForm_submit(forms[0]);"/>
<input type="submit" name="submit2" value="bbbが必須"
onclick="forms[0].name='clientValidatorActionForm_submit2';
return validateClientValidatorActionForm_submit2(forms[0]);"/>
</s:form>
</body>
</html>
検証用のJavaScriptを出力するために、html:javascriptタグを使います。formName属性には、「アクション名 + Form + _ + メソッド名」を指定します。
検証用のJavaScriptを呼び出すために、ボタン系タグのonclick属性で、form要素のname属性に上記のformName属性の値を代入した後に、「validate + formName属性の値」のメソッドを呼び出します。