レッツ・リファクタリング(1)

さてということでLoginActionをActionPOJOにしようか
まず現行のLoginAction.javaの名前を変えてしまおう。

  • LoginAction.java→LoginActionOld.java

そして、新しくインターフェースLoginAction.javaを作成する。↓redrisefirm.seasar.s2struts.action.LoginAction.java

public interface LoginAction {
  public String getDataList();
}

んで、struts-actions.xmlにこのインターフェースを使うための記述を加えておく。

<action path="/login" type="redrisefirm.seasar.s2struts.action.LoginAction" name="login">
  <forward name="unit" path="/jsp/allUnitData.jsp"/>
  <forward name="person" path="/jsp/allPerson.jsp"/>
</action>

次に実装クラスが必要なのでLoginActionImpl.javaを書く。↓redrisefirm.seasar.s2struts.action.LoginActionImpl.java

public class LoginActionImpl implements LoginAction {
  private String selectMenu = null;
  private List unitDataList = null;
  private List personList = null;
  private UnitDataDao unitDataDao = null;
  private PersonDao personDao = null;

  public LoginActionImpl(UnitDataDao unitDataDao, PersonDao personDao) {
    this.unitDataDao = unitDataDao;
    this.personDao = personDao;
  }

  public String getDataList() {
    //ユニットの一覧を取得する場合
    if (getSelectMenu().equalsIgnoreCase("unit")) {
      setUnitDataList(unitDataDao.getAllEntity());
    }
    //人の一覧を取得してくる場合
    if (getSelectMenu().equalsIgnoreCase("person")) {
      setPersonList(personDao.getAllPerson());
    }
    return getSelectMenu();
  }

  public final static String unitDataList_EXPORT = BindingUtil.SESSION;
  public final static String personList_EXPORT = BindingUtil.SESSION;

・・・(selectMenu、personList、unitDataListのgetter/setterは省略)・・・
}

んで、action.diconにコンポーネントとして登録しておく。ただ、daoを呼び出すのでdao.diconをincludeしておく。

<components namespace="action">
  <include path="redrisefirm/seasar/s2dao/dao.dicon"/>
  <component class="redrisefirm.seasar.s2struts.action.MaximActionImpl" instance="singleton"/>
  <component class="redrisefirm.seasar.s2struts.action.LoginActionImpl" instance="request"/>
</components>

dao.diconをaction.diconの中でincludeしたのでapp.dicon内のincludeは外しておく。
ActionFormクラスはそのままで問題なしなので、XDocletを実行してからHSQLDBTomcatを起動して

にアクセスして、ユニット一覧を出してみる。無事に出た。
これでLoginActionOld.javaを心置きなく葬る事ができる。さようなら〜。
でもまだまだ実装はヘボヘボである。そこの直しはその2へ続く・・・