バリデーションとエラーメッセージ
では、このサンプルを少し改良してみましょう。送信する項目を少し増やし、各項目に入力チェックの機能(バリデーション)を付け足してみることにします。まずはJSP側の修正です。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="stripes"
uri="http://stripes.sourceforge.net/stripes.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<title>Helo</title>
</head>
<body>
<h1>Helo Stripes.</h1>
<p>お名前を送信してください。</p>
<stripes:form beanclass="jp.codezine.HeloActionBean">
<stripes:errors />
<table>
<tr>
<td>Result:</td>
<td>${actionBean.result}</td>
</tr>
<tr>
<td>TEXT:</td>
<td><stripes:text name="TEXT" /><br>
</td>
</tr>
<tr>
<td>NUMBER:</td>
<td><stripes:text name="NUMBER" /><br>
</td>
</tr>
<tr>
<td colspan="2">
<stripes:submit name="submit" value="Submit" />
</td>
</tr>
</table>
</stripes:form>
</body>
</html>

ここでは、TEXTとNUMBERという2つの入力フィールドを用意しました。これらに、それぞれテキストと数値を入力させるようにしましょう。また簡単なバリデーションとして「TEXTは5文字以上10文字以下」「NUMBERは0~100の整数値」という入力制限をかけてみます。
ここでは、入力フィールドやフォームなどには、そのための修正などは特に行っていません。唯一、新たに追加しているのが、<stripes:errors />というタグです。これは、バリデーションなどのエラーメッセージを出力するためのタグです。これにより、入力値が不正だった場合にはここにエラーメッセージが表示されるようになります。
ActionBeanでの入力制限
では、ActionBeanクラスを作成しましょう。先のHeloActionBeanを次のように修正してください。
package jp.codezine;
import net.sourceforge.stripes.action.*;
import net.sourceforge.stripes.validation.*;
public class HeloActionBean implements ActionBean {
private ActionBeanContext context;
private String result;
@Validate(required=true,minlength=5,maxlength=10)
private String TEXT;
@Validate(required=true,minvalue=0,maxvalue=100)
private int NUMBER;
public String getTEXT() {
return TEXT;
}
public void setTEXT(String TEXT) {
this.TEXT = TEXT;
}
public int getNUMBER() {
return NUMBER;
}
public void setNUMBER(int NUMBER) {
this.NUMBER = NUMBER;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
@Override
public ActionBeanContext getContext() {
return this.context;
}
@Override
public void setContext(ActionBeanContext context) {
this.context = context;
}
@DefaultHandler
public Resolution submit() {
this.result = "あなたの入力した値:" + this.TEXT + ", " + this.NUMBER;
return new ForwardResolution("/helo.jsp");
}
}

ここでは、2つの入力フィールドが用意されていますが、これらはそれぞれStringとintのタイプとして用意されています。このようにフィールドのタイプによって、対応するフォームの入力項目の値のタイプを指定できます。
また、これらのフィールドにはバリデーションのためのアノテーションが追加されています。以下の部分です。
@Validate(required=true,minlength=5,maxlength=10) private String TEXT; @Validate(required=true,minvalue=0,maxvalue=100) private int NUMBER;
このように、フィールドの前に@Validateアノテーションを用意することで、そのフィールドにバリデーションを組み込むことができます。バリデーションの設定方法はこの他にもいろいろと用意されていますが、これがもっともシンプルで分かりやすい使い方でしょう。
()内には、設定するバリデーションに関する情報がまとめられています。それぞれ次のような働きをします。
- required=真偽値
- minlength=整数
- maxlength=整数
- minvalue=数値
- maxvalue=数値
必須項目とするかどうか。trueに設定すると、何も入力しない場合はエラーになる
最小文字数。指定された文字数以上でないとエラーになる
最大文字数。指定された文字数以下でないとエラーになる
最小値。指定された値以上でないとエラーになる
最大値。指定された値以下でないとエラーになる
たったこれだけで、それぞれのフィールドにバリデーションが設定されます。値のチェックやエラーの出力など、プログラマは一切行う必要はありません。アノテーションに従ってすべてStripesがチェックし、発生したエラーは自動的に<stripes:errors />に出力されます。
