- - PR -
struts actionからactionを呼び出す
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||
|
投稿日時: 2003-09-29 14:43
・ListFormのパラメータエラーと言われているgetter/setterを デバックなりログ出力なりでチェックし、途中で値が変化して いないかチェックする。 ・ListForm以外のパラメーターエラーでないかチェックする。 ですかね。 | ||||||||
|
投稿日時: 2003-09-29 15:25
ActionFormのresetメソッドが効いてるからでしょうか。 あんまり自信ないですけど…。 | ||||||||
|
投稿日時: 2003-09-29 15:36
返信ありがとうございます。 昨日いろいろみてたんですが、resetが動いているからでした。 ちょっと勘違いしていたようです。 てっきり、scope="session"にしておけば、次のリクエストは 引数なくてもセッションに入っているactionFormを使ってくれる ものだとおもっていました。 この結果からみると、そうではなさそうですね・・ | ||||||||
|
投稿日時: 2003-09-29 16:18
更新の場合にはresetしないように
resetメソッドをオーバーライドするなりの 工夫が必要かもしれませんね。 (完全にresetメソッドを無効にすると、 それはそれで問題になるでしょうし) | ||||||||
|
投稿日時: 2003-10-06 20:49
reset() メソッドを誤解している気がします。
http://jakarta.apache.org/struts/faqs/newbie.html#reset こちらをよく読んで頂ければ、 そもそも何のために用意されたメソッドなのかが理解できるでしょう。 // かく言う私も過去に思い切り勘違いしていたのでした。 | ||||||||
|
投稿日時: 2003-10-07 03:05
返信ありがとうございます。 ちょっと英語が苦手できちんと訳しているのか不安なのですが、 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-07 10:08
大意はこうです。
「reset()メソッドはチェックボックスのチェックをfalseにするためのメソッドである。」 session スコープで ActionForm を保持しているとチェックボックスのチェックを 普通は外す事ができないんです。 ですから reset() を用いて(アプリ側で)値を初期化するわけです。 その為、reset() はユーザからリクエストがある度に毎回呼び出されます。 ですから reset() を各種フォーム値をクリアしてしまうように実装してしまうと session スコープでも値は毎回リセットされてしまうわけです。 チェックボックスのチェックを外したい場合のみこれを実装するようにしろ、と 書いてあるわけですね。 どうもnoriさんは reset() を全フォーム値を初期化するように実装されているように 思えたもので「誤解」と書かせていただきました。 | ||||||||
