- PR -

Struts JSPの再表示時のActionForm値の再送信について

1
投稿者投稿内容
カイ
会議室デビュー日: 2005/08/15
投稿数: 6
投稿日時: 2005-08-15 03:33
Struts1.2.7 を使用しています。

JSP1というページの同フォーム内で複数アクションが発生し、
遷移先のページは同じ(JSP2)という処理を行っています。

・パターン1  JSP1 --> Action1 --> Action2 --> JSP2
・パターン2  JSP1 --> Action3 ----------------> JSP2
※ActionFormはAction1、Action2、Action3共に全て同じ"TestForm"というアクションフォームにしています。

ここで、遷移後のJSP2を一定時間で遷移元のアクションで動的に再表示する必要があるので、
パターン1の場合に発生させたいアクションはAction2、
パターン2の場合はAction3で行いたいので、Action2とAction3のexecuteメソッドで、
<meta>タグのcontent属性に設定する文字列を設定しています。
※request.setAttribute("refreshActionPath", "20;url=" + request.getContextPath() + mapping.getPath() + ".do");
設定される文字列 --> "20;url=/TEST/Action2.do"、または "20;url=/TEST/Action3.do"

JSP2の<meta>タグは以下のようにしています。
※<meta http-equiv="Refresh" content="<bean:write name="refreshActionPath"/>" >


●ここで問題になっているのが、JSP2の再表示時に発生させたアクション(Action2 or Action3)の
アクションフォーム(TestForm)のプロパティ値がnullになってしまいます。
この時欲しい値というのが、JSP1で入力されたアクションフォーム(TestForm)の値をそのまま再送信したいのですが、
JSP1を表示する為に用意しているresetメソッドのプロパティ値の初期化が、再表示のActionでも発生しているので
nullになってしまっているようなのですが、何かよい方法はないでしょうか?

すみませんが、ご教授お願いします。

-----
●JSP1 ※DispatchActionで振り分けてます。
<html:form method="get" action="/TestDispatch">
<html:submit property="action" styleClass="clsButton-01">
<bean:message key="buttons.Create" />
</html:submit>
<html:submit property="action" styleClass="clsButton-01">
<bean:message key="buttons.Select" />
</html:submit>
</html:form>

-----
●struts-config.xml
<!-- アクションフォーム -->
<form-beans>
<form-bean name="TestForm" type="form.TestForm"/>
</form-beans>

<!-- JSP1を表示するAction -->
<action-mappings>
<action
path="/JSP1"
type="action.Jsp1Action"
name="TestForm"
validate="false" >
<forward name="success" path="/jsp/JSP1.jsp" />
</action>

<!-- Action1、Action2への振り分け -->
<action
path="/TestDispatch"
type="action.TestDispatchAction"
name="TestForm"
parameter="action"
validate="false">
<forward name="Create" path="/Action1.do" />
<forward name="Select" path="/Action3.do" />
</action>

<!-- Action1 ("success"時、Action2を呼び出す) -->
<action
path="/Action1"
type="action.Action1"
name="TestForm"
validate="false">
<forward name="success" path="/Action2.do" />
</action>

<!-- Action2 (再表示時に発生させるアクション)-->
<action
path="/Action2"
type="action.Action2"
name="TestForm"
validate="false">
<forward name="success" path="/jsp/JSP2.jsp" />
</action>

<!-- Action3 (再表示時に発生させるアクション) -->
<action
path="/Action3"
type="action.Action3"
name="TestForm"
validate="false">
<forward name="success" path="/jsp/JSP2.jsp" />
</action>
</action-mappings>
カイ
会議室デビュー日: 2005/08/15
投稿数: 6
投稿日時: 2005-08-16 00:35
すいません、なんとか自己解決しました。

Action2、Action3のスコープをscope="session"に変更して、
TestFormのresetメソッドでセッションオブジェクトがnullでなければ
セッション内の値をプロパティに再設定するようにしました。

struts-configの<action name="TestForm">のname属性で、
コンテキストを取得できるのに気付いてなかったため、
forwardする前に自分で request.setAttribute で設定していた為、
スコープの取得先が入り混じっていたのでややこしくなってました。
1

スキルアップ/キャリアアップ(JOB@IT)