Struts 1での一覧表の取得と表示など

Struts 1でDBからデータを取得し表示する方法。

例えばある画面に「検索」ボタンがあり、押下時の処理としてDBから取得したデータを一覧表で表示するケース。
今回は一覧表の先頭列にユーザーが行を選択するためのラジオボタンを設ける。

  • Formクラスの作成

一覧表のデータを保持するList型フィールドを定義する。

package sample.struts.form;

import java.util.List;

import org.apache.struts.action.ActionForm;
import sample.struts.entity.HogeTbl;

/**
 * Hoge画面のFormクラス
 *
 */
public class HogeForm extends ActionForm {

	// DBのHogeテーブルから取得するデータを格納する変数
	private List<HogeTbl> hogeList;

	// 選択したレコードを特定するためのIDを格納する変数
	private String selectedHogeId = "";

	// 以下アクセサメソッド
	public List<TItemMst> getItemList() {
		return itemList;
	}

	public void setItemList(List<TItemMst> itemList) {
		this.itemList = itemList;
	}

	public String getSelectedItemId() {
		return selectedItemId;
	}

	public void setSelectedItemId(String selectedItemId) {
		this.selectedItemId = selectedItemId;
	}
}
  • Actionクラスの作成

処理の中でDBからデータを読込み上記のList型変数にセットする。
今回はHibernateマッピングしたテーブルEntityを内包するListをセット。

package sample.struts.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.hibernate.internal.CriteriaImpl;
import sample.struts.entity.HogeTbl;
import sample.struts.form.HogeForm;
import sample.struts.util.DbAccessUtil;

/**
 * Hoge画面のActionクラス
 *
 */
public class HogeAction extends LookupDispatchAction {

	public static HogeForm hogeForm;

	public ActionForward searchHoge(ActionMapping mapping, ActionForm form,
			HttpServletRequest req, HttpServletResponse res) {

		HttpSession session = req.getSession();
		hogeForm = (HogeForm) form;

		// DbAccessUtilはこちらで用意したDBアクセスのインターフェース的クラスでHibernateを介してDBアクセスする
		// DBセッション取得
		Session dbSession = DbAccessUtil.getSession();
		// 対象テーブルHogeTblを指定
		Criteria criteria = dbSession.createCriteria(HogeTbl.class);
		@SuppressWarnings("unchecked")
		// データを取得しFormの変数にセット
		List<HogeTbl> hogeList = criteria.list();
		hogeForm.setHogeList(hogeList);

		return (mapping.findForward("success"));
	}

	@Override
	protected Map<Object, Object> getKeyMethodMap() {
		Map<Object, Object> map = new HashMap<Object, Object>();
		map.put("submit.hoge_search", "search");
		return map;
	}
}
  • JSPファイルを作成
<%@page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@taglib uri="/WEB-INF/resources/struts-html.tld" prefix="html" %>
<%@taglib uri="/WEB-INF/resources/struts-bean.tld" prefix="bean" %>
<%@taglib uri="/WEB-INF/resources/struts-logic.tld" prefix="logic" %>
<%@page import="java.util.List"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ほげ</title>
</head>
<body>
  <html:form action="/hoge">
    <div><html:submit property="dispatch"><bean:message key="submit.hoge_search"/></html:submit></div>
    <table border="1">
      <caption>ほげ一覧</caption>
      <tr bgcolor="#eeeeee">
        <th></th>
        <th>ほげID</th>
        <th>ほげ名</th>
        <th>ほげ備考</th>
        <th>ほげ種別</th>
        <th>ほげタイプ</th>
      </tr>
      <logic:notEmpty name="HogeForm" scope="request">
        <logic:notEmpty name="HogeForm" property="hogeList" scope="request">

          <%-- 変数hogeListを宣言しFormから取得したhogeListをセットする --%>
          <bean:define id="hogeList" name="HogeForm" type="List" property="hogeList" scope="request"/>

          <%-- 一覧表でユーザーが選択した行を特定するためhogeIdを格納する変数selectedHogeIdを宣言しFormのselectedHogeIdを参照させる --%>
          <bean:define id="selectedHogeId" name="HogeForm" type="java.lang.String" property="selectedHogeId" scope="request"/>

          <%-- 一覧表表示 name="hogeList"は上で宣言した変数 --%>
          <logic:iterate id="hoge" name="hogeList">
            <tr>

              <%-- ユーザーが行を選択するためのラジオボタンの値(value)を格納する変数hidを宣言しhogeIを代入しておく --%>
              <bean:define id="hid" name="hoge" type="java.lang.String" property="hogeId"/>

              <%-- ラジオボタンを定義する --%>
              <td><html:radio property="selectedHogeId" value="<%=hid %>"/></td>
              <td><bean:write name="hoge" property="hogeId"/></td>
              <td><bean:write name="hoge" property="hogeName"/></td>
              <td><bean:write name="hoge" property="hogeRemarks"/></td>
              <td><bean:write name="hoge" property="hogeCategory"/></td>
              <td><bean:write name="hoge" property="hogeType"/></td>
            </tr>
          </logic:iterate>
        </logic:notEmpty>
      </logic:notEmpty>
    </table>
  </html:form>
</body>
</html>

省略。普通にアクションマッピングを定義するだけ。※遷移先は自画面