📘 Vol.8.1：【Struts2】タグライブラリの全体像と種類を把握する 〜JSP開発で使えるタグ一覧と役割まとめ〜

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


---
📘 [Vol.8.0：OGNL入門](https://qiita.com/juehara-crypto/items/9b9558d46dfa5ac75224) の続編です。

前回の記事では、Struts2のJSPタグライブラリ（`<s:〜>`）の根幹を支える「OGNL（Object Graph Navigation Language）」について学びました。今回は、その知識を活かして、Struts2タグライブラリの種類や役割を体系的に整理していきます。

---


## はじめに
Struts2を使ったWebアプリケーション開発において、JSPで使用するタグライブラリ（`<s:～>`タグ）はとても強力です。しかし、初心者にとっては「なんでJSPにJavaっぽいタグがあるの？」と戸惑うポイントの一つ。

今回は、**Struts2のJSPタグライブラリ**の中でも、特によく使うタグを厳選して分かりやすく解説します！

## 目次
1. `<s:form>`：Struts2のフォーム

2. `<s:hidden>`：隠しフィールドの指定

3. `<s:textarea>`：テキストエリアの表示

4. `<s:actionerror>`：アクションエラーの表示

5. `<s:submit>`：送信ボタン

6. `<s:iterator>`：リストの繰り返し処理

7. JavaBeanのプロパティへのアクセス

8. セッション情報の取得と表示

9. アクションURLの生成（`<s:url>` + `<s:param>` + `<s:a>`）

10. アクション呼び出しと結果の変数化（`<s:action>`）

11. まとめ

---
## 1. `<s:form>`：Struts2のフォーム

```
<s:form action="InsertThread" method="post">
    <s:textfield name="thread.thread_title" />
    <s:submit value="作成" />
</s:form>
```

Struts2の`<s:form>`タグは、サーバー側のアクションクラスと直接紐づくフォームを作成します。
`action属性`でアクションクラスを指定し、`method="post"`でPOST送信されます。

---

### 2. <s:hidden>：隠しフィールドの指定
```
<s:hidden name="bulletinboard_id" value="%{bulletinboard_id}" />
```
サーバーに値を渡したいけど、画面には表示したくない！
そんな時に使えるのが`<s:hidden>`タグです。
例えば「掲示板ID」などの情報を次画面に渡すのに便利です。

---

### 3. <s:textarea>：テキストエリアの表示
```
<s:textarea name="post_content" cols="60" rows="5" />
```

投稿フォームなどで、複数行の文字入力を受け付けるために使います。

---

### 4. `<s:actionerror>`：アクションエラーの表示

```
<s:actionerror />
```
サーバー側でバリデーションに失敗したときに、エラーメッセージを表示してくれます。
とても手軽にユーザーへのフィードバックができます。

---

### 5. `<s:submit>`：送信ボタン
```
<s:submit value="送信" />
```
これだけで送信ボタンが作れます。ボタンに表示されるラベルはvalue属性で指定。

---

## 6. `<s:iterator>`：リストの繰り返し処理
```
<s:iterator value="userList">
    <tr>
        <td><s:property value="user_id" /></td>
        <td><s:property value="user_name" /></td>
    </tr>
</s:iterator>
```
リスト形式のデータ（例えば、ユーザー一覧）をループで表示したいときに便利。
中で`<s:property>`を使って各プロパティにアクセスします

---

## 7. JavaBeanのプロパティへのアクセス
```
<s:textfield name="bulletinboard.bulletinboard_id" />
```
このように書くと、`bulletinboard`というオブジェクトの`bulletinboard_id`プロパティにアクセスできます。
Struts2では、フォームの各項目とアクションのプロパティが自動でバインドされるのが強みです。

---

### 8. セッション情報の取得と表示
```
<s:property value="#session.loggedInUser.user_name" />
```
`#session`でセッションスコープにアクセス可能！
ログインユーザーの情報をセッションから直接取得して画面に表示できます。

---
### 9. アクションURLの生成とパラメータ追加
```
<s:url var="createThreadUrl" action="MoveCreateThread">
    <s:param name="bulletinboard_id" value="%{bulletinboard_id}" />
</s:url>
<a href="<s:property value="#createThreadUrl" />">スレッド作成</a>
```

- `<s:url>`：Struts2のアクションに対応するURLを生成

- `<s:param>`：クエリパラメータを追加

- `<s:property>`で生成したURLをhrefに埋め込んでリンク化

同様に「編集」「削除」などのアクション付きリンクも作れます：
```
<s:url var="editUrl" action="EditUser">
    <s:param name="id" value="%{user_id}" />
</s:url>
<s:a href="%{editUrl}">編集</s:a>
```

### 10. アクション呼び出しと結果の変数化（非推奨だが便利）
```
<s:action name="getBulletinboards" var="bulletinboardsAction" />
```

JSPからアクションを直接呼び出して、結果を変数に格納できます。
ただし、処理の分離やテスト性の観点からは非推奨とされることもあります。


---


### 11. おまけ：HTMLでの直接リンクも使える
```
<a href="<%=request.getContextPath()%>/goToManagementMenu.action">管理メニューに戻る</a>
```

Struts2に限らず、通常のHTMLリンクでアクションに遷移させることも可能です。
ただし、JSP内でロジックを書きすぎないように注意！

----

### まとめ
Struts2のタグライブラリは、アクションとの連携、バリデーションエラーの表示、リストの繰り返し、URL生成など、Webアプリケーションで**必要な処理を最小限の記述で実現**できる優れものです。

特に初心者にとっては「こんなことまでできるの!?」と感動するポイントがたくさん。
ぜひ、自分のプロジェクトに活用してみてください！

----

## おすすめ関連記事
- [📘 Vol.7.3：Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61)

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

- [📘 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)

- [📘 Vol.8.7：【Struts2】バリデーションUIの味方！ `<s:fielderror>` / `<s:actionerror>` / `<s:actionmessage>` 徹底ガイド 〜エラーメッセージの表示とフォーム連携の基本〜](https://qiita.com/juehara-crypto/items/b5bacb915f8baea2f2ec)

---