Struts2 - validation(検証ファイル利用)
Struts2のバリデーション機能を使い、入力値をチェックを行える。
ルール
- ファイル名 : <Action名>-validation.xml
- バリデーション失敗後は、input対応のviewを返す
- actionと同じパス内
サンプル
register-input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>register input</title> <s:head/></head> <body> <s:form action="register"> <s:textfield name="name" label="ユーザ名"/> <s:textfield name="pass" label="パスワード"/> <s:textfield name="age" label="年齢"/> <s:textfield name="birth" label="生年月日"/> <s:submit value="登録"/> </s:form> </body> </html>
register-complete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>validation success</title> </head> <body> ユーザ名:<s:property value="name"/><br/> パスワード:<s:property value="pass"/><br/> 年齢:<s:property value="age"/><br/> 生年月日:<s:property value="birth"/><br/> </body> </html>
- action
package action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport { private String name; private String pass; private int age; private Date birth; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setPass(String pass) { this.pass = pass; } public String getPass() { return this.pass; } public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } public void setBirth(Date birth) { this.birth = birth; } public Date getBirth() { return this.birth; } }
- actionのバリデーションファイル
RegisterAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- DTD --> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- name属性 --> <field name="name"> <!-- 必須 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>ユーザ名は必須入力</message> </field-validator> <!-- name属性の正規表現 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message>4文字~25文字内の数字と文字</message> </field-validator> </field> <!-- pass属性 --> <field name="pass"> <!-- 必須 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>パスワードは必須</message> </field-validator> <!-- パスワード属性の正規表現 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message>4文字~25文字内の数字と文字</message> </field-validator> </field> <!-- age属性 --> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年齢は1-150</message> </field-validator> </field> <!-- birth属性 --> <field name="birth"> <field-validator type="date"> <!-- フォーマット --> <param name="min">1900/01/01</param> <param name="max">2050/02/21</param> <message>生年月日は${min} ~ ${max}</message> </field-validator> </field> </validators>
国際化対応
RegisterAction-validation.xml
<!-- name属性 --> <field name="name"> <!-- 必須 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="name.requried"></message> </field-validator> <!-- name属性の正規表現 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message key="name.regex"></message> </field-validator> </field>
RegisterAction.properties
name.requried=ユーザ名は必須入力 name.regex=4文字~25文字内の数字と文字
クライアントでバリデーションを行う
- s:formタグのvalidate=true属性設定
<s:form action="register" validate="true"></s:>
この設定を行うことで、html内にバリデーションチェックjsが生成される。
サポートするvalidator
- required validator
- requiredstring validator
- stringlength validator
- regex validator
- email validator
- url validator
- int validator
- double validator
注意点
- s:formのthemeはsimple指定してはいけない?
- 直接viewアクセスしてはいけない(WEB-INF内配置)
- 国際化対応の場合、グローバルリソースを使う
- actionとnamespaceは別々に書く。 <s:form action="register" namespace="/lee">