📘 Vol.8.7：【Struts2】バリデーションUIの味方！ <s:fielderror>  /  <s:actionerror>  /  <s:actionmessage> 徹底ガイド   〜エラーメッセージの表示とフォーム連携の基本〜

本記事は、Struts2でJSPを書く際に頻出するタグの基本を網羅する  
📘「Vol.8.0〜8.7：Struts2 タグライブラリ入門編（基本操作・最低限の知識）」 シリーズの一部です。

---

## ✅ はじめに

Struts2では、**ユーザー入力に対するバリデーション**がとても重要です。  
ただし、バリデーション結果をUI側（JSP）にどう表示するかも、同じくらい大切なポイントです。

本記事では、バリデーションUIに欠かせない以下の3タグを使いこなすための知識と実例を徹底解説します！

- `<s:fielderror>`：項目単位のエラー表示
- `<s:actionerror>`：画面全体に関するエラー
- `<s:actionmessage>`：成功メッセージなどの通知用

---

## 🔸 1. `<s:fielderror>` 〜 入力フォームのエラー表示に必須！

`<s:fielderror>` は、**特定のフォーム項目に関連するエラー**を表示するためのタグです。

```jsp
<s:form action="register">
  <s:textfield name="username" label="ユーザー名" />
  <s:fielderror fieldName="username" />
  <s:submit value="登録" />
</s:form>
```

上記では、Actionクラス内で `addFieldError("username", "ユーザー名は必須です")` のように指定されたメッセージが表示されます。

---
### 🔸 2. `<s:actionerror>`  〜 システムや処理全体のエラーに！
`<s:actionerror>` は、画面全体に関わるエラー（例：ログイン失敗、DB接続エラーなど）を表示したい場合に使います。
```jsp
<s:actionerror />
```

```java
addActionError("ユーザー名またはパスワードが違います。");
```
✅ フォーム入力ではなく、処理上の失敗に使い分けましょう！

---

### 🔸 3. `<s:actionmessage>` 〜 成功メッセージの表示に最適！

`<s:actionmessage>` は、成功時や通知のメッセージを表示するためのタグです。
例えば、更新完了後の通知などに使えます。

```jsp
<s:actionmessage />
```
```jsp
addActionMessage("ユーザー情報を更新しました。");
```
---

### 🧩 4. ActionSupportでのエラー登録方法

Struts2の `ActionSupport` クラスにある以下のメソッドを使うことで、JSPにメッセージを渡せます。

| メソッド名                | 対応するタグ              | 用途             |
| -------------------- | ------------------- | -------------- |
| `addFieldError()`    | `<s:fielderror>`    | 項目単位のバリデーション失敗 |
| `addActionError()`   | `<s:actionerror>`   | 全体的なエラー        |
| `addActionMessage()` | `<s:actionmessage>` | 成功通知や注意喚起メッセージ |


### 💡 5. 実務Tips：複数メッセージとカスタマイズ
***✔ 複数エラーがある場合は自動的にリスト形式で表示されます！***

```java
addFieldError("username", "ユーザー名が短すぎます");
addFieldError("username", "特殊文字は使えません");
```

→ 2つとも `<s:fielderror>` に表示されます。

----

***✔ カスタムデザインもOK***
以下のように `<s:iterator>` と組み合わせれば、HTMLやCSSで装飾できます。

```jsp
<ul class="error-list">
  <s:iterator value="fieldErrors['username']">
    <li><s:property /></li>
  </s:iterator>
</ul>
```
---

## 🔍 補足：Struts2の ActionSupport クラスとは？

本記事では、バリデーション結果の表示に関するタグ（`<s:fielderror>` / `<s:actionerror>` / `<s:actionmessage>`）を紹介しましたが、実際にこれらのメッセージをActionクラスから画面に渡すために、`addFieldError()` や `addActionMessage()` などのメソッドを使いました。
これらの便利なメソッドがすぐに使えるようになっているのは、Struts2の `ActionSupport` クラスがあらかじめ用意してくれているからです。

Struts2の多くのアクションでは、この `ActionSupport` を継承することで、エラーメッセージの追加や国際化対応など、さまざまな機能をすぐに使えるようになっています。

```java
public class SampleAction extends ActionSupport {
    // 例えばこんな風にメッセージを追加できるのは…
    addActionMessage("登録が完了しました");
}
```
### ✅ ActionSupport の主な役割
Struts2の `ActionSupport` クラスは、以下のような機能を備えたAction開発の基本クラスです。

- addFieldError() / addActionError() / addActionMessage() などのメッセージ系メソッドの提供

- 多言語対応に便利な getText() メソッドの提供

- Action, Validateable, ValidationAware など、複数のインタフェースを実装済み

Struts2ではActionクラスを `ActionSupport` を継承して作成するのが一般的です。***特にバリデーションやメッセージ表示の実装において、その恩恵は非常に大きい***です。


## 🔍 更に補足:
本プロジェクトでは、共通処理を集約した `BaseAction` クラスが `ActionSupport` を継承しており、各アクションは `BaseAction` を継承しています。
このように、Struts2の基本仕様とプロジェクト固有の構成を理解しておくことで、柔軟かつ効率的な開発が可能になります。




### 🔚 まとめ
Struts2のタグライブラリは、***ただの見た目補助ではなく、アプリケーションのUIと処理の橋渡し***をしてくれる強力なツールです。

- `<s:fielderror>` でフォームのエラーをピンポイントに

- `<s:actionerror>` で全体のエラーをまとめて通知

- `<s:actionmessage>` で成功メッセージや注意喚起をしっかり表示

この3タグを覚えるだけで、***バリデーションUIの信頼性とユーザー体験***が大きく向上します！

---


## 📚 関連記事（Vol.8シリーズ）
- [📘 Vol.8.0：【Struts2】OGNL入門　〜タグライブラリを支える最重要基礎技術〜](https://qiita.com/juehara-crypto/items/9b9558d46dfa5ac75224)


- [📘 Vol.8.1：【Struts2】タグライブラリの全体像と種類を把握する 〜JSP開発で使えるタグ一覧と役割まとめ〜](https://qiita.com/juehara-crypto/items/9635c8746d362496aef3)

- [📘 Vol.8.2：【Struts2】JSPタグライブラリ実践テンプレート集 〜現場で即使える！フォーム・URL・セッション活用まとめ〜](https://qiita.com/juehara-crypto/items/f57e473a85b2c9845730)

- [📘 Vol.8.3：Struts2で作る共通レイアウトJSP 〜header/footerを使った再利用設計〜](https://qiita.com/juehara-crypto/items/96cee6c986e13bbacd8c)

- [📘 Vol.8.4：【Struts2】「s:action」「s:token」タグ徹底解説！〜アクション呼び出しと二重送信防止の最前線〜](https://qiita.com/juehara-crypto/items/6e54c3be0c35aa464724)

- [📘 Vol.8.5：【Struts2】条件分岐タグ（s:if / s:else）徹底解説！ 〜表示制御と実務応用の決定版〜](https://qiita.com/juehara-crypto/items/d9883eae6585aa62b93e)

- [📘 Vol.8.6：【Struts2】画面部品の共通化！ s:include / s:component 徹底解説 〜JSPヘッダー/フッターの再利用でメンテ効率UP〜](https://qiita.com/juehara-crypto/items/b36801f70830d2c056aa)


---