.log(ぽちろぐ)

福岡.平尾に住んでるSE(スーパーエロい)の日記。

Struts2 Validation。

     入力チェックがしたいとき。必須入力とか、正規表現アンマッチとか。Struts2にはValidationって仕組みが用意されてます。XML地獄になるんだけど、しょうがないかな?。

     正常系の動作を作ってしまってからでも、xmlファイルを配置すれば入力チェックを追加することができます。
     入力チェックの仕様が変更になったから正常系の試験をやり直しキーッ!!! てことが無くなる、といいなあ・・・。

     アノテーションこれです。
    @Result(name = "input", location = "/error.jsp")
    
    validationエラーの時の遷移先をlocationに書いておきます

     入力チェックしたい値を、クラス変数として用意。privateにしておくなら、セッターゲッターも必要です。
    	/** 名前 */
        private String name;//TODO この値をチェックします。
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    
     ナンチャラ-validation.xmlを用意。ナンチャラの部分は、アクションクラスのクラス名をコピペします。
    DataAction-validation.xml
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    <validators>
    <field name="name">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>名前は必須入力項目です。</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">2</param>
            <message>名前は2文字以上で入力してください。</message>
        </field-validator>
    </field>
    </validators>
    
     これらを用意しておくと、アクションクラスのexecute()が実行される前に、validationが走って、XMLの内容で入力チェックします。
    入力エラーがある場合は、エラーの遷移先へ。入力エラーがないならば、通常の遷移先へ。
    全景はこんな感じ。
    input.jsp
    <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="Windows-31J"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>入力してください。</title>
    </head>
    <body>
    <!-- ▼これがエラーメッセージ表示 -->
    <s:fielderror />
    
    <s:form action="data">
    <s:textfield name="name" value="%{name}" label="名前"/>
    <s:submit value="execute"/>
    </s:form>
    </body>
    </html> 
    
    DataAction.java
    package 適当に;
    
    import org.apache.struts2.convention.annotation.Results;
    import org.apache.struts2.convention.annotation.Result;
    import com.opensymphony.xwork2.ActionSupport;
    @Results({
        @Result(name="input", location="/input.jsp"),
        @Result(name="success", location="/debug.html")
    })
    public class DataAction extends ActionSupport {
        /** 名前 */
        private String name;
    
        /**
         * 業務処理
         * **-validation.xmlに設定した入力チェックを抜けたら、executeを実行します。
         */
        public String execute(){
            System.out.println("validationを通過");
            System.out.println("業務処理を行います。"); //TODO 実際の処理をいろいろ書くはず
            return "success";
        }
    
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    }
    

     xmlの書き方はこちら参考。
     Struts2を使ってみる Validation編