0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.9.8:【Struts2】独自バリデータ作成編 〜 カスタムFieldValidatorで共通バリデーションを再利用しよう 〜

Last updated at Posted at 2025-05-24

🧭 はじめに

Struts2では requiredregex などの標準バリデータを使って
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におけるバリデーションの品質を保つためのヒントをお届けします!


✨ シリーズまとめ(Vol.9.x バリデーション編)


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?