そろそろ画面遷移を考えねば

さて、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は使わなくなったのでバッサリと削除しておく。