読者です 読者をやめる 読者になる 読者になる

liguofeng29’s blog

個人勉強用ブログだっす。

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">