🧭 はじめに
Struts2では required
や regex
などの標準バリデータを使って
XMLやJavaでバリデーションを簡単に定義できます。
しかし、以下のような 複雑なチェックや複数画面での使い回し をしたい場合、
「独自バリデータ(Custom FieldValidator)」 を作成するのがベストです。
✅ 独自バリデータが必要になる場面
パターン | 解説 |
---|---|
特定形式の文字列チェック(例:社員番号、電話番号など) | 他の画面でも使い回したい |
条件付きチェック(ある値のときだけ制限をかけたい) |
validate() だけだと画面ごとに書く必要がある |
画面ごとに同じルールを書いていて保守がつらい | バリデーション処理を共通化したい |
🛠 カスタムバリデータ作成の流れ
-
1.FieldValidatorSupport を継承したJavaクラスを作る
-
2.validate() メソッド内でロジックを記述
-
3.validators.xml または -validation.xml で定義して使う
✍ 実装例:AlphanumericValidator.java(英数字チェック)
① Javaクラスの作成
public class AlphanumericValidator extends FieldValidatorSupport {
@Override
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String value = (String) getFieldValue(fieldName, object);
if (value != null && !value.matches("^[a-zA-Z0-9]+$")) {
addFieldError(fieldName, object);
}
}
}
② validators.xml に登録
src/validators.xml
(共通で使えるように設定)
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="alphanumeric" class="com.company.bulletinboard.validator.AlphanumericValidator"/>
</validators>
③ 使用側の validation.xml にて呼び出し
<field name="userId">
<field-validator type="alphanumeric">
<message>ユーザーIDは英数字のみで入力してください。</message>
</field-validator>
</field>
🔍 GitHub実装例(予定 or 検討中)
🛠 独自バリデータ設置予定ディレクトリ:
src/main/java/com/company/bulletinboard/validator/
- 再利用性の高いチェックはこの中にまとめていくと便利です!
💡 使い回しのTips
ポイント | 解説 |
---|---|
validators.xml に登録すれば全体で利用可能 |
どのActionでもtype="xxx" で呼び出せる |
複数のバリデータに共通ロジックがあるなら基底クラス化もあり | DRY原則を意識して構成可能 |
テストしやすい構造にしておくと将来メンテしやすい | 単体テスト or Validator単体のJUnit化も視野に |
🎯 まとめ
-
カスタムバリデータを使えば、複雑なチェックや再利用性の高いルールも1つに集約できる
-
XMLベースで呼び出せるため、従来のvalidate()との併用もOK
-
validators.xml で一元管理することで、プロジェクト全体で使える資産に
🧭 次回予告:Vol.9.9
次回は、**バリデーション処理の「単体テスト」**について解説します!
-
validate() のテスト
-
独自バリデータのJUnitテスト
-
エラー発生時の挙動確認(input 遷移、メッセージ表示)
Struts2におけるバリデーションの品質を保つためのヒントをお届けします!