Struts1.3.5でDispatchActionを使ったディスパッチ

感想おまちしてます!

「org.apache.struts.actions.DispatchAction」を使う。

このクラスの特徴は、struts-config.xmlにディスパッチ情報を記述できること。これによって、すっきりーすっきりーする。

http://struts.apache.org/1.3.5/struts-extras/apidocs/org/apache/struts/actions/DispatchAction.html

ActionはActionServletとビジネスロジックとをつなぐアダプタクラス。Actionクラスごとにビジネスロジックをわけるのもいいけど、グルーピングして1つのActionとしたい場合もある。

例えば、あるデータ(ユーザ情報としよう)の登録、削除、更新などは1アクションにまとめておいたほうが、3つのActionクラスを作るよりもわかりやすい。これだけだと、別に3クラスでもいいんじゃない?と思う。

ただ、登録画面を開くときの初期化Actionと、登録処理Actionがあるとする。2つの処理は「登録」というロジックに含まれる処理だから、
1Actionでいいのではないか?と思った。それに、Actionクラスにはビジネスロジックを記入しないのが、MVCパターンにのっとった設計(参
考:Struts/StrustとMVCモデル)と言えるだろうから、こういったグルーピングは重要。

スポンサーリンク

使い方 

DispatchActionを継承してActionクラスを作成する。

public class LoginAction extends DispatchAction {
public ActionForward login(
ActionMapping map,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res)
}

executeメソッドは他の場所で使われるので作ってはいけない。ここではloginメソッドを作った。このメソッドを呼び出してもらうために、
JSPにパラメタを追加する。複数のSubmitがあると想定してSubmitボタンにmethodというパラメタ名、loginとパラメタ値を設定す
る。

<html:form action="/login">
<html:submit property="method" value="login"></html:submit>
</html:form>

struts-config.xmlにこのパラメタに対応したActionを指定する。

<action path="/login"
type="com.daipresents.struts135.login.LoginAction"
name="LoginForm"
scope="request"
parameter="method">
<forward name="success" path="top" />
<forward name="error" path="/login/login.jsp" />
</action>

parameter属性にmethodを指定する。これによって、JSPからくるmethodパラメタに指定されたActionクラス内のメソッド(ここではloginメソッド)を呼び出してくれる。

問題点

<html:submit property="method" value="login"></html:submit>

とJSPに書くと、「login」と書かれたボタンができてしまう。日本語で「ログイン」と表示したくてもできない。。。

また、「/login.do?method=login」と書いても呼び出せてしまう。