【Struts2フレームワーク】テーブルのデータを表で表示してみよう!

はじめに

データベースに格納されているテーブルのデータを画面上に表として表示するプログラムをご紹介したいと思います。

下記サイトでテーブルのデータをリストデータとして取得する方法を書いているので、よかったら参考にして下さいね。

今回扱うJavaのフレームワークは「Struts2」です。

Struts2ではモデルとしてリストデータを渡してあげれば、繰り返し処理を使って(s:iterator)、データを表示することができます。

モデルとは、MVC(Model View Controller)デザインパターンのモデルのことです。

MVCとは、プログラムをModel(データそのものやデータ操作)とView(画面)とController(MとVの橋渡し役もしくは司令塔的な役割)の3つに分けて作成しようという考え方です。

今回で言うと、コントローラがモデルからビューにデータを渡すイメージです。

開発環境

開発環境は下記の通りです。

Struts2 2.5.14.1
Hibernate 4.3.0.Final
MySQL 8.0.16

モデルの作成

今回、画面に受け渡すリストデータが変数名listです。

package com.pom2019.Struts2Web.model;

import java.util.List;

import com.pom2019.Struts2Web.entities.HouseholdAppliances;

public class IndexModel {
    private List<HouseholdAppliances> list;

    //ゲッター、セッター
    public List<HouseholdAppliances> getList() {
        return list;
    }
    public void setList(List<HouseholdAppliances> list) {
        this.list = list;
    }
}

コントローラの作成

  1. どのモデルを使うか宣言
    ModelDrivenをインプリメントすることで、どのモデルを使うのかを宣言しています。ここでは、IndexModelクラスを使うことを宣言しています。(18行目)
  2. モデルの初期化
    フィールドでIndexModelインスタンスを作成しています。(21行目)
  3. モデルにデータの設定
    モデルにリストデータ(hList)を設定しています。(31行目)
package com.pom2019.Struts2Web.actions;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.pom2019.Struts2Web.entities.HouseholdAppliances;
import com.pom2019.Struts2Web.entities.dao.HouseholdAppliancesDao;
import com.pom2019.Struts2Web.model.IndexModel;
import com.pom2019.listener.HibernateListener;

import java.util.List;

import javax.servlet.ServletContext;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.util.ServletContextAware;
import org.hibernate.SessionFactory;

@Namespace("/")
@ParentPackage("struts-default")
public class Index extends ActionSupport implements ServletContextAware, ModelDriven<IndexModel> {
    private static final long serialVersionUID = -1884587001523422505L;
    ServletContext context;
    private IndexModel indexModel = new IndexModel();

    @Action(value = "display", results = {
            @Result(name = "success", location = "/WEB-INF/content/displayList.jsp")
    })
    public String execute() {
        SessionFactory sf = (SessionFactory) context.getAttribute(HibernateListener.KEY_NAME);

        HouseholdAppliancesDao hDao = new HouseholdAppliancesDao(sf);
        List<HouseholdAppliances> hList = hDao.findAll();
        indexModel.setList(hList);

        return ActionSupport.SUCCESS;
    }

    public void setServletContext(ServletContext context) {
        this.context = context;
    }

    @Override
    public IndexModel getModel() {
        return indexModel;
    }
}

ビューの作成

リストデータ(list)をs:iteratorで繰り返し処理を行い、データを表示させています。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>家電リスト</title>
    <style>
    table {
        border-collapse: collapse;
    }
    td {
        border: 1px solid gray;
        padding: 3px 8px;
    }
    </style>
</head>
<body>
<h2>家電リスト</h2>

<table>
    <tr>
        <td>id</td>
        <td>家電名</td>
        <td>購入日時</td>
    </tr>
    <s:iterator value="list">
        <tr>
            <td><s:property value="id"/></td>
            <td><s:property value="householdAppliancesName"/></td>
            <td><s:property value="purchaseDate"/></td>
        </tr>
    </s:iterator> 
</table>

</body>
</html>

実行結果

家電リストが表示されました。

まとめ

MVCデザインパターンを使えば、作業の分業が行えて、保守性も上がります。

例えば、画面作成とロジック作成を別の人で行う、もしくはEntity/Dao作成とロジック作成を別の人で行うなどです。

最後までお読み頂きありがとうございました。

広告

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


ABOUT US
ぽむ
はじめまして! ぽむ と申します。 Java、Kotlin (Android)、VBAなどの開発経験があるITエンジニアです。 備忘録として始めたブログですがみなさまのお役に立てたら光栄です。 英語など IT 以外の話題にも触れていこうと思っています。 詳しい自己紹介についてはこちら! よろしくお願いします。