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.2:【Struts2】入力チェックの実装編 〜 validate() / input遷移 / fielderrorタグを使いこなす 〜

Last updated at Posted at 2025-05-23

Vol.9.1 では「なぜ入力バリデーションが必要か?」をフレームワークに依存しない視点で整理しました。
本稿では Struts2 における代表的なバリデーション実装パターンを、実際のプロジェクトコードとあわせて解説します。


✅ 基本パターン:validate() メソッド + addFieldError()

Struts2 の Action クラスにおける入力チェックの王道パターンです。

@Override
public void validate() {
    if (userId == null || userId.trim().isEmpty()) {
        addFieldError("userId", "ユーザーIDを入力してください。");
    }
    if (password == null || password.trim().isEmpty()) {
        addFieldError("password", "パスワードを入力してください。");
    }
}
  • validate() メソッドは、Action 実行前に自動で呼ばれる。

  • addFieldError(fieldName, message) によって、フィールド単位のエラーを保持。


🔁 input 遷移で入力画面に戻す

struts.xml に以下のような設定をすることで、バリデーションエラー時には入力画面に戻すことができます。

<action name="login" class="com.company.bulletinboard.action.login.LoginAction">
    <result name="success">/userPortal.jsp</result>
    <result name="input">/login.jsp</result>
</action>
  • input は、validate() 内でエラーがあったときに返る予約語的な結果名。

  • エラー時には、指定した JSP に自動遷移されます。


💬 JSP 側でのエラーメッセージ表示:

<%@ taglib prefix="s" uri="/struts-tags" %>

<s:form action="login">
    <s:fielderror />
    <s:textfield name="userId" label="ユーザーID" />
    <s:password name="password" label="パスワード" />
    <s:submit value="ログイン" />
</s:form>
  • <s:fielderror /> を配置することで、addFieldError() で設定されたエラーが一覧で表示されます。

  • 各フィールド直下に配置することで、項目ごとのエラーとしてレイアウト可能。


📦 実際のプロジェクトでの validate() 実装例はこちら 👉

  • LoginAction クラスでは、実際に validate()addFieldError() を使って入力チェックを実装。
    LoginAction.java(GitHub) の validate 実装(78〜95行目

  • struts.xml では input 遷移で /login.jsp に戻る設定
    struts.xml(GitHub)の実装(30行目)

  • JSP 側では を活用して、ユーザーにエラー表示を行なっています
    login.jsp(GitHub)の実装 (14行目~18行目))

📝 補足:BaseAction に共通化しない理由

GitHub の BaseAction.java をご覧いただくとわかるように、validate() の共通化は行っていません。

これは以下の理由によります:

  • validate() のチェック内容が画面(フォーム)ごとに大きく異なるため。

  • 汎用化・共通化を無理に行うと、逆に各画面のロジックが複雑になりやすい。

  • 実務では画面単位で明示的に validate() を実装する方が管理しやすいケースが多い。


✅ まとめ

要素 内容
validate() Action 実行前に自動呼び出しされる入力チェック
addFieldError() フィールド単位のエラー追加
input 遷移 エラー発生時に戻る画面を struts.xml で定義
<s:fielderror /> JSP 側でのエラー表示タグ
実務的運用 各画面の Action に validate() を個別実装する運用が現実的

👉 次回は、Vol.9.3xmlバリデーションファイル を用いたチェック方法や、型変換エラー処理(conversionErrorFieldValidator) について掘り下げていきます!


📚 前回記事: 📘 Vol.9.1:【Struts2】validate() メソッドの基本 〜 addFieldError / input遷移による入力チェックの王道パターン 〜

🔗 記事一覧: Vol.9.x まとめページ

テーマ 内容の一部紹介
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&保守性を両立するハイブリッド構成

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?