- PR -

Strutsのstruts-config.xmlのinputの値を動的に変更するには?

1
投稿者投稿内容
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-16 19:59
こんばんわ。さやべえです。
Strutsでの開発でscope=sessionかつvalidate=trueで
validationを行っています。複数の画面でvalidateメソッドを共有して
チェックを行っていますが、エラーになった場合に、それぞれの入力ページに
飛ばせたいと思っています。
この辺りの情報をお持ちの方がいらっしゃいましたらご教授お願いいたします。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-16 20:30
何かこう、ActionとActionFormの関係やらを、
もう少し具体的に書いて頂けます?

イメージし辛くて・・・。
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-16 20:46
さやべえです。

登録フォームが複数の画面で構成されています。
(登録画面1⇒登録画面2⇒確認画面⇒完了画面)
ActionとActionFormは1つです。
hiddenパラメーターでFoward先をActionのExecuteメソッド内で変更しています。

<action
attribute="HogehogeForm"
input="step1.jsp"
name="HogehogeForm"
path="/HogehogeAction"
scope="session"
type="com.hogehoge.HogehogeAction"
validate="true">
<forward name="BackFirst" path="/step1.jsp" />
<forward name="BackSecond" path="/WEB-INF/jsp/step2.jsp" />
<forward name="Confirmation" path="/WEB-INF/jsp/confirmation.jsp" />
<forward name="GoSecond" path="/WEB-INF/jsp/step2.jsp" />
<forward name="Sucess" path="/WEB-INF/jsp/done.jsp" />
</action>

mapping.setInput(飛び先)というメソッドを使ってみましたが、Configuration is frozen
してしまいました。調べたところ1.1ではダメのようです。

http://www.mail-archive.com/struts-user@jakarta.apache.org/msg48920.html

どのようなanother solutionがあるでしょうか?
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-16 21:13
1. validate="false" にして Action 内で手動で ActionForm#validate() を呼ぶ
2. 各入力ステップに応じて <action> を分ける(path も分かれる)
3. 2 と同様 path を分けるが <action> 記述にワイルドカードを使う

ざっと考えただけですけど、上のような方法がありますね。
3つ目は私は試した事が無いんですけどなかなか便利そうです。

http://jakarta.apache.org/struts/userGuide/building_controller.html
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-16 21:38
でくのぼうさんレスありがとうございます。
もう少しお付き合い願いたいのですが、、Action内で下記のように実装しました。
コード:
ActionErrors errors = new ActionErrors();
errors = theForm.validate(mapping, request);
if (errors.isEmpty()) {
  forward = mapping.findForward("GoSecond");
} else {
  forward = mapping.findForward("BackFirst");
}


errorsを渡す部分の実装方法がさくっと解決できません。
(現在:Google検索中です・・・)

もしよろしければアドバイスを頂ければと思っております。
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-16 21:44
さやべえです。自己レスです。

コード:
ActionErrors errors = new ActionErrors();
errors = theForm.validate(mapping, request);
if (errors.isEmpty()) {
  forward = mapping.findForward("GoSecond");
} else {
  saveErrors(request, errors);
  forward = mapping.findForward("BackFirst");
}



これで行けました。ありがとうございました。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-16 21:45
Action#saveErrors(javax.servlet.http.HttpServletRequest request, ActionMessages errors)

こんなのがあります。
意に沿うものなら良いんですけど。

http://jakarta.apache.org/struts/api/org/apache/struts/action/Action.html
1

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