レッツ・リファクタリング(1)
さてということでLoginActionをActionPOJOにしようか
まず現行のLoginAction.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を実行してからHSQLDB、Tomcatを起動して
にアクセスして、ユニット一覧を出してみる。無事に出た。
これでLoginActionOld.javaを心置きなく葬る事ができる。さようなら〜。
でもまだまだ実装はヘボヘボである。そこの直しはその2へ続く・・・