📘 Vol.10.4：Actionとの連携実装（Struts2との融合）

DTO・DAO・DB接続クラスの設計を学んだ方へ。  
本記事では、それらのクラスを実際に **Struts2のActionクラスとどのように連携させるか** を徹底解説します！

---

## 🔰 1. Struts2におけるActionクラスの役割

Actionクラスは、Struts2における**MVCのController**に相当します。

- フォーム入力やURLリクエストの受け口
- DAO/Serviceなどを使って**ビジネスロジックを実行**
- DTOなどを介して、結果データを**JSP（View）に渡す**

---

## 🧩 2. DTO・DAOとの連携の流れ

基本構成は以下の通り：

Action → DAO → DB → DTO → View（JSP）



例：`UserListAction.java`

```java
public class UserListAction extends ActionSupport {
    private List<User> users;

    public String execute() {
        UserDao dao = new UserDaoImpl();
        users = dao.findAll(); // DAOからDTOのList取得
        return SUCCESS;
    }

    public List<User> getUsers() {
        return users; // JSPからEL式で取得可能
    }
}
```

---


### 🧪 3. 典型的な実装例：ユーザ一覧表示

## 🎯 Actionクラス
```java
public class UserListAction extends ActionSupport {
    private List<User> userList;

    public String execute() {
        UserDao dao = new UserDaoImpl();
        userList = dao.findAll();
        return SUCCESS;
    }

    public List<User> getUserList() {
        return userList;
    }
}

```

---

### 🌐 4. struts.xml の設定

```xml
<action name="userList" class="com.example.action.UserListAction">
    <result name="success">/view/UserList.jsp</result>
</action>

```

→ `userList.action` にアクセスすると、`UserListAction` が実行され、`UserList.jsp` が表示されます。

---


### 📄 5. JSPでDTOを表示する

```jsp
<table>
  <tr><th>ID</th><th>名前</th><th>Email</th></tr>
  <s:iterator value="userList" var="user">
    <tr>
      <td><s:property value="#user.userId"/></td>
      <td><s:property value="#user.username"/></td>
      <td><s:property value="#user.email"/></td>
    </tr>
  </s:iterator>
</table>
```

※ `getUserList()` の戻り値を `userList` としてJSPで使えます。

---

### 🛠 6. よくある連携ミスとその対策

| 問題例                    | 原因と対策                              |
| ---------------------- | ---------------------------------- |
| `NullPointerException` | DAOを `new` し忘れ／DIが未設定              |
| JSPでデータが表示されない         | DTOに `getter` が未実装                 |
| Actionが呼ばれない           | struts.xml の `name` or `class` が誤記 |

---

### 🧾 まとめ

| 要素     | 役割                     |
| ------ | ---------------------- |
| Action | ユーザーの入力を受けて処理・JSPへの橋渡し |
| DAO    | DBへのアクセス責任を持つクラス       |
| DTO    | データ保持用のJavaBean        |
| JSP    | DTOからデータを受け取って表示       |

---

### 🔜 次回予告（Vol.10.5）
📘 Vol.10.5 では…

🧪 **DAO・DTOのテスト設計（JUnitやH2活用）** を解説予定！
ユニットテストで品質の高い開発を目指しましょう💪

---

以上、Struts2 × DAO/DTO の連携完全ガイドでした！
次回もどうぞお楽しみに 😄


---

### ✨ シリーズまとめ（Vol.10.x バリデーション編）

- [✅ Vol.10.0：DAO / DTO / JavaBeansとは？ ― データ層設計の全体像と役割分担 ―](https://qiita.com/drafts/19c1d526df28240e0cb1/edit)

- [✅ Vol.10.1：DTO設計のベストプラクティス（命名規則・フィールド設計](https://qiita.com/juehara-crypto/items/1b0ad616095f8ae134ec)

- [✅ Vol.10.2：DAOのインタフェース設計と実装パターン ](https://qiita.com/juehara-crypto/items/bcb15618440bef5931ef)

- [✅ Vol.10.3：DB接続クラスの共通化とドライバ設計](https://qiita.com/juehara-crypto/items/c3d4e8e6887d5ec8e1eb)

- [✅ Vol.10.5：DAO・DTOのテスト設計（JUnitやH2活用）](https://qiita.com/juehara-crypto/items/9f0914697726068b9e93)

- [✅ Vol.10.6：Service層の設計方針と例外処理戦略 ](https://qiita.com/juehara-crypto/items/6685c303c40e48b3c1f3)

- [✅ Vol.10.7：Service層×JUnitテストの基本とパターン](https://qiita.com/juehara-crypto/items/128fda40df3ffa0fedce)

- [✅ Vol.10.8：Service層の共通基盤化とDI対応 ](https://qiita.com/juehara-crypto/items/8e94acf2a31be15aaf94)

---