1) バリデーション機能による入力チェック
ここでは、バージョン3.1から導入されたバリデーション機能の設定方法について解説します。
バリデーション機能はこれまでアクションクラスに実装していた入力チェックをフレームワーク
が代行するための機能です。
これにより、アクションクラス毎に実装していた入力チェックが省かれ、
結果的にWebアプリケーションのコーディング量を減らすことができます。
チュートリアル1をベースにバリデーション対応に変更してみましょう。
ここで紹介するWebアプリケーションの構成は以下のとおりです
2) 入力画面の作成 (HelloInput.html)
まず入力となる画面です。
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head><title>Hello</title></head>
<body>
<font color="red">
<span title="w_kind=error"/>
</font>
<form method="post" action="./tutorial/HelloInput.do">
名前を入力してください<br/>
例)ios tarou<p/>
<input name="name" value="${name}"/><p/>
年齢を入力してください<br/>
<input name="age" value="${age}"/><p/>
<input type="submit" value="送信"/><br/>
</form><p/>
</body>
</html>
特に修正箇所はありません。
3) 出力結果画面の作成(HelloOutput.html)
次に出力結果を表示する画面を作成します。この画面もチュートリアル1と同じものを使います。
<?xml version="1.0" encoding="Shift_JIS" ?>
<html><head><title>Hello</title></head>
<body>
ようこそ${hello.name}さん<br/>
${hello.name}さんは
${hello.age}歳ですね。<br/>
<span title="w_kind=equal:w_name=hello:w_property=age:w_value=20">
今年は成人式ですね。<br/>
</span>
<span title="w_kind=mequal:w_name=hello:w_property=age:w_value=20">
たばこ吸えますね。<br/>
</span>
<span title="w_kind=lthan:w_name=hello:w_property=age:w_value=20">
たばこ吸えませんね。<br/>
</span>
<table border="1">
<tr>
<td>名前</td><td>年齢</td>
</tr>
<span title="w_kind=iterate:w_id=person:w_name=personList" >
<tr>
<td>${person.name}</td>
<td>${person.age}</td>
</tr>
</span>
</table>
</body>
</html>
4) アクションクラスの作成(HelloAction.java)
このサンプルのアクションクラスです。
package tutorial;
import java.util.ArrayList;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
public class HelloAction extends Action{
// public void doValidate(){
// if(!isInt("age")){
// this.putMessage("age", "年齢には数値を入力してください");
// }
// if(!isNotNull("name")){
// this.putMessage("name", "名前を入力してください");
// }
// }
public String doExecute(ActionBucket bucket){
HelloBean hello = (HelloBean)bucket.getForm();
String newName = hello.getName().toUpperCase();
hello.setName(newName);
bucket.setAttribute("hello", hello);
ArrayList personList = (ArrayList)bucket.getAttributeFromSession("personList");
if( personList == null){
personList = new ArrayList();
bucket.setAttributeFromSession("personList", personList);
}
personList.add(hello);
return "success";
}
}
入力チェック用のメソッドdoValidate()をコメントアウトしています。
5) フォームクラスの作成(HelloBean.java)
入力画面にセットされたリクエストパラメータを受け取るためのクラスです。
package tutorial;
public class HelloBean {
private String name;
private int age;
public String getName() { return name; }
public void setName(String string) { name = string; }
public int getAge() { return age; }
public void setAge(int i) { age = i; }
}
6) アクションマッピングの定義(weber-config.xml)
このサンプルのアクションマッピングを定義しています。
<?xml version="1.0" encoding="Shift_JIS" ?>
<weber-config>
<action-mappings>
<action
path="/tutorial/HelloInput.do"
name="tutorial.HelloBean"
type="tutorial.HelloAction">
<param name="name">
<!-- 必須チェック -->
<validate type="requird" msgkey="E1001" />
</param>
<param name="age">
<!-- 必須チェック -->
<validate type="requird" msgkey="E1002" />
<!-- 半角英数チェック -->
<validate type="eisu" msgkey="E1002" />
<!-- 数値範囲チェック -->
<validate type="digit_length" msgkey="E1003" min="0" max="199" />
</param>
<forward name="success" path="/html/tutorial/HelloOutput.html"/>
<forward name="org.itscool.weber.action.INPUT_ERROR" path="/html/tutorial/HelloInput.html"/>
</action>
</action-mappings>
</weber-config>
Actionクラスに記述していた入力チェックをparam要素
で定義しています。
バリデーション機能には、必須チェックや半角英数チェックなど用途に合わせて様々な入力チェックを
行うことができます。
param要素には、入力チェックの対象となるリクエストパラメータの論理名を指定します
param要素配下のvalidate要素にチェック項目を指定します
validate要素に指定する属性は以下の通りです
| 属性 | 必須 | 説明 |
| type | 必須 |
チェックする内容を選択します type属性に指定可能なキーは以下の通りです |
| msgkey | msgbodyを指定しない場合は必須 | 入力チェックでエラーになったときに出力するメッセージをmessage-config.xml に登録されているメッセージIDで指定します |
| msgbody | msgkeyを指定しない場合は必須 | 入力チェックでエラーになった時に出力するメッセージを指定します |
| min | type属性にstr_lengthもしくはdigit_lengthを指定したとき必須 | 文字列の最小桁数あるいは数値の最小値を指定します |
| max | type属性にstr_lengthもしくはdigit_lengthを指定したとき必須 | 文字列の最大桁数あるいは数値の最大値を指定します |
7) message-config.xml
message-config.xmlは入力エラー時のメッセージを定義します。
メッセージ定義ファイルは以下のようなXMLファイル(message-config.xml)を作成し、
クラスファイルを保管しているディレクトリ配下(/WEB-INF/classes直下等)に保存します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<weber-message>
<messages>
<message key="E1001" value="名前を入力してください"/>
<message key="E1002" value="年齢を数値で入力してください"/>
<message key="E1003" value="年齢は0から199の範囲で入力してください"/>
</messages>
</weber-message>