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>
省略。普通にアクションマッピングを定義するだけ。※遷移先は自画面