そろそろ画面遷移を考えねば
さて、Actionの作り方がわかったところで、画面遷移をやってサイトらしくしてみましょうか。
まず、トップページを作ったばかりの名言集のページを改造して使うことにする。
ここで何の一覧(ユニット、人、etc...)を見たいかをラジオボタンで選択し、サブミットボタンで画面遷移させる。
ということでトップページのjspを修正してみる。↓maxim.jsp
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean" %> <html:html> <head> <title>MSDB-Mgr:topPage</title> </head> <body bgcolor="#404040" text="#A0A0A0"> <h2>ひとこと↓</h2> <marquee><font face="HG丸ゴシックM-PRO" size="7" color="#80CCFF"><bean:write name="todayMaxim"/></font></marquee><br/> <center> <input type="button" value="もう一言!" onclick="window.location.reload();"></input> </center> <hr width="95%"/> <form action="./login.do" method="POST"> <table frame="box" align="center"><tr><td> <input type="radio" name="selectMenu" value="unit" checked/><font face="MSゴシック" size="5" color="#FFCC80">ユニットデータ</font> </td></tr><tr><td> <input type="radio" name="selectMenu" value="person"/><font face="MSゴシック" size="5" color="#FFCC80">登場人物一覧</font> </td></tr><tr><td align="center"> <input type="submit" value="いっきま〜す!"/> </td></tr></table> </form> </body> </html:html>
さて、次に何かの一覧を取得するためのActionを用意する必要がある。ここでは、/login.doに対するActionクラスが必要だ。
ということで、普通にActionクラスを書く。とりあえず動くものということでツッコミどころ満載のコードだが。↓redrisefirm.seasar.s2struts.action.LoginAction.java
/** * @struts.action path="/login" name="login" * @struts.action-forward name="unit" path="/jsp/allUnitData.jsp" * @struts.action-forward name="person" path="/jsp/allPerson.jsp" */ public class LoginAction extends Action { private S2Container m_container = null; public LoginAction(S2Container container) { this.m_container = container; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //セッションの取得 HttpSession session = request.getSession(); //選されたルートを取得してくる String route = request.getParameter("selectMenu"); //ユニット一覧を取得してくる場合 if (route.equalsIgnoreCase("unit")) { UnitDataDao unitDataDao = (UnitDataDao) m_container .getComponent("UnitDataDao"); session.setAttribute("unitDataList", unitDataDao.getAllEntity()); } //人の一覧を取得してくる場合 if (route.equalsIgnoreCase("person")) { PersonDao personDao = (PersonDao) m_container.getComponent("PersonDao"); session.setAttribute("personList", personDao.getAllPerson()); } return mapping.findForward(route); } }
これでとりあえずは動くことを確認する。
さて、このコードをどうリファクタリングしようかと眺めているとyuki_neko_nyanから「Action POJOを使えぃ、愚か者がぁ!」と一喝。
ということで、Action POJOを使用して同等のコードを書くことにする。
またこの時点で先に書いたGetAllUnitDataActionとGetAllUnitDataActionFormは使わなくなったのでバッサリと削除しておく。