4月 7th, 2008at 12:28

Tags: ,

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

このエントリーをはてなブックマークに追加