🧭 今回のテーマ
Struts2では validate()
メソッド以外にも、XMLファイルに定義する形式でも入力チェックを実装できます。
本記事では、以下の内容を体系的に整理します。
- XMLによるバリデーションの定義方法
- メリット/デメリットと使い分け
-
input
遷移との連携 - 実務で使う標準バリデータ(requiredstring / int / regex など)
-
short-circuit
属性による最適化
📦 ファイル構成と命名ルール
Struts2のXMLバリデーションファイルは、対象Actionクラスと連動した命名規則に従います。
[Actionクラス名]-validation.xml
たとえば、LoginAction.java
に対応するファイルは:
/src/.../login/Login-validation.xml
と配置される必要があります。
🛠️ 基本構文:requiredstring
バリデータの例
<validators>
<field name="userId">
<field-validator type="requiredstring">
<message>ユーザーIDを入力してください</message>
</field-validator>
</field>
</validators>
この設定により、userId
フィールドが未入力の場合、エラーメッセージが自動的に <s:fielderror />
タグ経由でJSPに表示されます。
🧰 よく使うバリデーター一覧
バリデーター名 | 内容 |
---|---|
requiredstring |
空文字・未入力のチェック |
int |
整数であるかの検証 |
date |
日付形式であるか(パターン指定可) |
regex |
正規表現で形式を検証 |
email |
Email形式の検証 |
⚡ short-circuit="true" で複数バリデーターの最適化
<field-validator type="requiredstring" short-circuit="true">
<message>ユーザーIDを入力してください</message>
</field-validator>
short-circuit="true"
を指定することで、このバリデーションがNGなら以降のチェックをスキップ できます。
例えば「空文字の時点で正規表現チェックは不要」といった場合に使うと処理効率が上がります。
📥 input 遷移と連携する流れ
XMLバリデーションがエラーを返すと、Struts2は自動的に input
結果に遷移します。
<action name="login" class="LoginAction">
<result name="success">/userPortal.jsp</result>
<result name="input">/login.jsp</result>
</action>
JSP側で <s:fielderror />
を設置していれば、XMLで定義されたエラーメッセージが表示されるという仕組みです。
📦 実際のプロジェクト実装例(GitHub)
🔗 Login-validation.xml(GitHub)
👉 Login-validation.xml
🔗 login.jsp におけるエラーメッセージ表示
👉 login.jsp
<s:fielderror />
📘 今回のまとめ
項目 | 内容 |
---|---|
記述場所 |
[Action名]-validation.xml に配置 |
遷移制御 | バリデーション失敗時は input 結果に遷移 |
JSP |
<s:fielderror /> を設置してエラー表示 |
実務Tips |
short-circuit="true" で不要なチェックを回避 |
validate()との違い | Javaコードに書かずに、宣言的にチェック可能 |
📝 補足Tips:正規表現など XML で困ったら?
実務では、XMLバリデータが期待通り動作しないケースも存在します(例:regexバリデーションで一部パターンが効かない)。
その場合は、Java側の validate()
メソッドで柔軟に対応するのがオススメです。
🔽 実際の実装例(GitHub)
👉 LoginAction.java - L57〜L75:validate()による複雑なチェック
🧭 次回予告:Vol.9.4
次回は、複数フィールドにまたがるバリデーションや条件付きチェックなど、実務でよく出くわす「一工夫が必要なケース」 を深掘りします。
📗 前回記事
📘 Vol.9.2:【Struts2】入力チェックの実装編 〜 validate() / input遷移 / fielderrorタグを使いこなす 〜
📙 次回記事
【Vol.9.4】条件付きバリデーションと複数フィールド連動チェック編(仮)
🔎 Vol.9系で扱うトピック
回 | テーマ | 内容の一部紹介 |
---|---|---|
9.1 |
validate() メソッドの基本 |
Struts2標準の入力チェック基礎 |
9.2 |
@Validations アノテーション活用 |
宣言的バリデーション設計 |
9.3 |
validation.xml 外部定義でのバリデーション |
大規模PJでのメンテナンス性 |
9.4 |
conversion.properties と型変換 |
日付/数値/Enum変換の実務対応 |
9.5 | 入力エラー時のメッセージ制御 |
addFieldError() / メッセージキー運用 |
9.6 | バリデーション共通化 | 共通部品によるDRY設計 |
9.7 | サーバサイドとクライアントサイドの協調 | jQueryやHTML5との併用戦略 |
9.8 | 実務シナリオでのバリデーション総仕上げ | 会員登録/投稿処理などの実例適用 |
9.9 | バリデーション処理の単体テスト編 | validate()/独自バリデータ/input遷移の検証を網羅的に |
9.10 | エラー表示のUIデザイン編 | 視認性・操作性を高める実践テクニック |
9.11 | Ajax×バリデーション連携編 | クライアント×サーバーで UX&保守性を両立するハイブリッド構成 |