- PR -

struts actionからactionを呼び出す

投稿者投稿内容
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2003-09-27 15:14
struts-config.xmlの定義で、以下の動作をさせようとしているのですが、
うまくいきません。
/listVw.do呼び出し時の引数が足らないといわれてしまいます。

/listVw.do(リスト画面表示)

リスト画面の更新ボタンをクリック

/update.do
↓ 正常終了したら、再び同じリスト画面を表示
/listVw.do(リスト画面表示)


/listVw.doのscope="session"としているので、引数をセットしなくても情報は残っているとおもっているのですが、なぜだパラメータエラーとなります。
なにか、勘違いしていることがあったらご指摘お願いいたします。


struts-config.xml ------------------------------

<!-- List view action -->
<action
attribute="ListForm"
input="/top.do"
name="ListForm"
path="/listVw"
scope="session"
type="aa.bb.cc.ListAction">
<forward name="success" path="/List.jsp" />
<forward name="failure" path="/error.jsp" />
</action>

<!-- Update action -->
<action
attribute="UpdateForm"
input="/listVw.do"
name="UpdateForm"
path="/update"
scope="request"
type="aa.bb.cc.UpdateAction">
<forward name="success" path="/listVw.do" /> ←リスト表示に戻る
<forward name="failure" path="/error.jsp" />
</action>



【環境】
RedhatLinux 9
jakarta-tomcat-4.1.27-LE-jdk14
struts 1.1
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-29 14:43
引用:

noriさんの書き込み (2003-09-27 15:14) より:
/listVw.doのscope="session"としているので、引数をセットしなくても情報は残っているとおもっているのですが、なぜだパラメータエラーとなります。
なにか、勘違いしていることがあったらご指摘お願いいたします。



・ListFormのパラメータエラーと言われているgetter/setterを
 デバックなりログ出力なりでチェックし、途中で値が変化して
 いないかチェックする。
・ListForm以外のパラメーターエラーでないかチェックする。

ですかね。
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-09-29 15:25
引用:

noriさんの書き込み (2003-09-27 15:14) より:
/listVw.doのscope="session"としているので、引数をセットしなくても情報は残っているとおもっているのですが、なぜだパラメータエラーとなります。



ActionFormのresetメソッドが効いてるからでしょうか。
あんまり自信ないですけど…。
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2003-09-29 15:36
引用:

スガさんの書き込み (2003-09-29 15:25) より:
引用:

noriさんの書き込み (2003-09-27 15:14) より:
/listVw.doのscope="session"としているので、引数をセットしなくても情報は残っているとおもっているのですが、なぜだパラメータエラーとなります。



ActionFormのresetメソッドが効いてるからでしょうか。
あんまり自信ないですけど…。



返信ありがとうございます。
昨日いろいろみてたんですが、resetが動いているからでした。
ちょっと勘違いしていたようです。
てっきり、scope="session"にしておけば、次のリクエストは
引数なくてもセッションに入っているactionFormを使ってくれる
ものだとおもっていました。
この結果からみると、そうではなさそうですね・・

パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-09-29 16:18
更新の場合にはresetしないように
resetメソッドをオーバーライドするなりの
工夫が必要かもしれませんね。
(完全にresetメソッドを無効にすると、
それはそれで問題になるでしょうし)
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-10-06 20:49
reset() メソッドを誤解している気がします。

http://jakarta.apache.org/struts/faqs/newbie.html#reset

こちらをよく読んで頂ければ、
そもそも何のために用意されたメソッドなのかが理解できるでしょう。

// かく言う私も過去に思い切り勘違いしていたのでした。
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2003-10-07 03:05
引用:

でくのぼうさんの書き込み (2003-10-06 20:49) より:
reset() メソッドを誤解している気がします。

http://jakarta.apache.org/struts/faqs/newbie.html#reset

こちらをよく読んで頂ければ、
そもそも何のために用意されたメソッドなのかが理解できるでしょう。

// かく言う私も過去に思い切り勘違いしていたのでした。



返信ありがとうございます。
ちょっと英語が苦手できちんと訳しているのか不安なのですが、

No. You need to set checkbox properties to false if the ActionForm is being retained in session scope. This is because an unchecked box does not submit an attribute. Only checked boxes submit attributes. If the form is in session scope, and the checkbox was checked, there is no way to turn it back off without the reset method. Resetting the properties for other controls, or for a request scope form, is pointless. If the form is in request scope, everything already just started at the initial value.

できれば約していただけないでしょうか・・大体の意味でかまわないので。。
他力本願なことを言って申し訳ないのですが、よろしくお願いいたします。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-10-07 10:08
大意はこうです。
「reset()メソッドはチェックボックスのチェックをfalseにするためのメソッドである。」
session スコープで ActionForm を保持しているとチェックボックスのチェックを
普通は外す事ができないんです。
ですから reset() を用いて(アプリ側で)値を初期化するわけです。

その為、reset() はユーザからリクエストがある度に毎回呼び出されます。
ですから reset() を各種フォーム値をクリアしてしまうように実装してしまうと
session スコープでも値は毎回リセットされてしまうわけです。

チェックボックスのチェックを外したい場合のみこれを実装するようにしろ、と
書いてあるわけですね。

どうもnoriさんは reset() を全フォーム値を初期化するように実装されているように
思えたもので「誤解」と書かせていただきました。

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