Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Struts EventDispatchAction利用時におけるforward先のパスにactionを指定したい

はじめましてお世話になります。
表題についてわかりにくい表現で申し訳ありません。

現在StrutsにおけるEventDispatchActionについて勉強しているのですが、
たとえば、struts_config.xml上に次のように

<action input="/pages/01.jsp" name="XXXXX01Form" parameter="default=init, login" path="/login" type="XXXXX01Action">
  <forward name="init" path="/pages/01.jsp"/>
  <forward name="success" path="/user.do"/>
</action>
<action input="/pages/02.jsp" name="XXXXX02Form" parameter="default=init, login" path="/user"  type="XXXXX02Action">
  <forward name="init" path="/pages/02.jsp"/>
  <forward name="success" path="/pages/03.jsp"/>
</action>

というように、記載しており、
path="/login"でのloginメソッドを呼び出したときに、forward先でuser.doアクションを呼び出すように指定しています。

このとき、期待値としては、
forward先でuser.doアクションが呼び出された結果、
XXXXX02Actionでのinitメソッドを呼び出して初期化処理用のイベントを呼び出されれば良いと考えているのですが、

どうも(当たり前の話かもしれませんが)、XXXXX02Actionを呼び出す際のdispatch時にもHttpServletRequestを引きずっているようで、
XXXXX02Actionのloginメソッドを呼び出してしまいます。

判り難くて申し訳ありませんが、処理順を示すと次のようになります。

**

(1) 画面上のloginボタンを押下
(2) XXXXX01Actionでloginメソッドが呼び出される。(※1)
(3) ActionForward<forward name="success" path="/user.do"/>
(4) XXXXX01Actionでinitメソッドが呼び出されずにloginメソッドが呼び出される。(※2)

※1 EventDispatch時での各パラメータの内容は以下
    ★String parameter = getParameter(mapping, form, request, response);
    →init, login
    ★String methodName = getMethodName(mapping, form, request, response, parameter);
    →login
※2 EventDispatch時での各パラメータの内容は以下
    ★String parameter = getParameter(mapping, form, request, response);
    →init, login
    ★String methodName = getMethodName(mapping, form, request, response, parameter);
    →login(requestの内容を引きずっているため/本当はinitが返ってきてほしい)

**

このように、
Struts EventDispatchAction利用時におけるforward先のパスにactionを指定し、
初期化イベントを起こす為の対処方法として一番適切な方法はどのようなものでしょうか。

無理やり初期化イベント用と画面イベント用でactionをstruts_config.xml上で分けて、
初期化イベント用のactionが指定されてもParameter内にマッチングするものがないために結果defaultのinitメソッドが呼ぶように
strutsフレームワークをごまかす、、、(?)みたいな方法しかありませんでしょうか。


以上、皆様のお知恵をお借りしたく、よろしくお願いいたします。
失礼します。

1

回答

5386

閲覧

1件の回答

評価

0

>> スレ主

/struts-config/action-mappings/action/foward@redirect=true

を設定すればいいかと。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。