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.3:xmlバリデーションファイル を用いたチェック方法や、型変換エラー処理(conversionErrorFieldValidator) について掘り下げていきます!


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

🔗 記事一覧: 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?