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」と書いても呼び出せてしまう。




