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遷移による入力チェックの王道パターン 〜