Struts2をやってみる (7) - フォームバリデーション (2) -
前回の続き。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 を参考