SAStrutsでクライアントサイドバリデーション
SAStrutsでクライアントサイドバリデーションは次のようにして行ないます。
今回は、最初のサブミットボタンを押すと、aaaのみが必須チェックがかかり、次のボタンを押すとbbbのみが必須チェックがかかるサンプルで説明します。
ClientValidatorAction.javaのソースコードは次のようになります。
ClientValidatorAction.java
ボタン(メソッド)ごとに対象となるバリデータを変えたい場合、バリデータ用のアノテーションのtarget属性にメソッドの名前を指定します。複数のメソッドを指定したい場合は、カンマ(,)で区切ってください。
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";
}
}
clientValidator.jspは次のようになります。
clientValidator.jsp
検証用のJavaScriptを出力するために、html:javascriptタグを使います。formName属性には、「アクション名 + Form + _ + メソッド名」を指定します。
<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を呼び出すために、ボタン系タグのonclick属性で、form要素のname属性に上記のformName属性の値を代入した後に、「validate + formName属性の値」のメソッドを呼び出します。