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.3:【Struts2】XMLバリデーション定義編 〜 Login-validation.xmlによる入力チェックと input遷移の連携 〜

Last updated at Posted at 2025-05-24

🧭 今回のテーマ

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

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】条件付きバリデーションと複数フィールド連動チェック編(仮)


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?