🧭 今回のテーマ
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
📘 今回のまとめ
項目 | 内容 |
---|---|
記述場所 |
[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】条件付きバリデーションと複数フィールド連動チェック編(仮)