Struts2をやってみる (7) - フォームバリデーション (2) -

2013-09-20T00:00:00+00:00 Java Struts2

前回の続き。validateメソッドでグダグダとしましたけど、それをXMLで定義して利用する事も可能だって事らしいのでやってみる。構成は前回と全く同じ、クラス等を修正するだけ

IndexAction.java

package sample.action;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class IndexAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    private String name = null;

    public String say() throws IOException {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/plain); charset=utf-8");

        PrintWriter out = response.getWriter();
        out.print(name);
        out.flush();
        out.close();

        return NONE;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

validateメソッドを実装しないだけ、それ以外は前回と同じ

でXMLファイルはアクションクラスのパッケージ(.を/で階層化)/アクションクラス-validation.xmlで定義する

src/main/resources/sample/action/IndexAction-validation.xml

<?xml version="1.0" ?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <validator type="requiredstring">
        <param name="fieldName">name</param>
        <!-- <message>${getText("name")} is required</message> -->
        <message key="errors.required.name" />
    </validator>
</validators>

<message key=".propertiesのキー名" />でエラーメッセージを.propertiesから取ってくる事も出来る。コメントアウトしているけど、普通にテキストを書く事も出来てOGNL?による評価も出来る模様

で同じディレクトリにIndexAction_ja.propertiesを

name=名前
errors.required.name=${getText("name")}を入力せよ

っていう感じで作る。あとはビルドしてサーバー起動

余談

Struts2で定義済みなXMLで使えるバリデーションルールは http://struts.apache.org/release/2.3.x/docs/validation.html#Validation-RegisteringValidators を参考

Struts2をやってみる (8) - Exception Handling - Struts2をやってみる (6) - フォームバリデーション (1) -