引き続きTerasolunaのバリデーションチェックについて、本日はTerasoluaの相関チェックをお話しします。
そのたのバリデーションチェックをお知りたい方々は、本ブログのそのたの関連記事をご覧ください。
それでは、生年月日と年齢の相関チェックの実装方法を例として説明します。
つまり、JSPページ入力した生年月日と年齢を計算して、一致しない場合、相関チェックエラーを出す。
(1) 相関チェックの実ロジックチェックを、FormBeanクラスに実装する。
実装のポイントは、formBeanクラスを、必ずMultiFieldValidatorインタフェースのvalidateメソッドを実装する。
僕の例:
public class RegistForm implements MultiFieldValidator {
・・・・・・
/**
* 入力された年齢と、生年月日の相関入力チェックを行う。
*
* @param birth 生年月日
* @param fields 関連する入力フィールド値
* @return チェック結果
*/
public boolean validate(String birth, String[] fields) {
String age = fields[0];
if (birth == null || "".equals(birth)) {
return true;
}
return checkBirthAndAge(birth, Integer.parseInt(age));
}
/**
* 入力された生年月日から計算した年齢と入力された年齢を比較する。
* 同一の場合はtrueを返却、異なっている場合は、falseを返却する。
*
* @param birth 入力された誕生日
* @param age 入力された年齢
* @return 比較結果
*/
private boolean checkBirthAndAge(String birth, int age) {
//現在日付の取得
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String temp = format.format(DateUtil.getSystemTime());
//年月日を配列に変換。
String[] old = birth.split("/");
String[] now = temp.split("/");
//単純に現在の年から、入力された年を引く。
int minus = Integer.parseInt(now[0]) - Integer.parseInt(old[0]);
//入力された月が現在の月以下の場合、且つ
//入力された日が現在の日よりも小さい場合は、マイナス1する。
if ((Integer.parseInt(now[1]) < Integer.parseInt(old[1]))
|| (Integer.parseInt(now[1]) == Integer.parseInt(old[1])
&& Integer.parseInt(now[2]) < Integer.parseInt(old[2]))) {
minus--;
}
//入力された年齢と比較する。
if (age == minus) {
return true;
}
return false;
}
}
(2) validation.xmlファイルで、生年月日(birth)と年齢(age)の相関チェックの関連設定。
<field property="birth"
depends="multiField">
<msg key="MSG0005" name="multiField"/>
<arg key="生年月日" resource="false" position="0" />
<arg key="年齢" resource="false" position="1" />
<var>
<var-name>fields</var-name>
<var-value>age</var-value>
</var>
<var>
<var-name>multiFieldValidator</var-name>
<var-value>
net.zanmai.sampleProject.form.RegistForm
</var-value>
</var>
</field>
これで、バリデーションチェックファイルで、生年月日(birth)と年齢(age)の相関チェック設定しました。
生年月日と年齢一致しない場合、相関チェックエラーでMSG0005のメッセージ内容を表示する。
相関チェックエラーの場合、下記のようなイメージが表示する。
以上、Terasolunaバリデーションチェックの相関チェックでした。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…