バリデーションとエラーメッセージ
では、このサンプルを少し改良してみましょう。送信する項目を少し増やし、各項目に入力チェックの機能(バリデーション)を付け足してみることにします。まずは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 />に出力されます。