- ベストアンサー
Formを継続して使う方法
一度画面から受取ったデータ(Form)を保持しながら次の画面のデータも同じFormで受取りたいのですが、そういったことは可能でしょうか? 例: setting.jsp⇒SettingForm(data1を保持)⇒SettingAction⇒setting2.jsp⇒SettingForm(data1とdata2を保持)⇒SettingAction2(2つのデータをDBに登録) 説明がヘタでごめんなさい。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
おっしゃられている処理をするにはActionクラスで 何かしらの処理を行う必要があり、そのままFormを使いまわすことは できません。SettingActionでデータの詰め替えを考えましょう。 また、データ2のチェックに関してはvalidateを用いるか、Action以降で チェックするかによって処理が変わってきます。
その他の回答 (3)
- kazsharp
- ベストアンサー率37% (16/43)
No.2の回答者です >すみません、struts-config.xmlの設定はわかっていますが、setting1.jspとsetting2.jspで同じFormのインスタンスを使いたい場合、どうすればいいですか? No.2の回答の方法で「同じインスタンス」を使えます。 というより、同じインスタンスでしか使えなくなります。 (struts-config.xmlの設定がわかっているということですので、scopeの設定は正しくされていると思うのですが。。。)
- kazsharp
- ベストアンサー率37% (16/43)
FormとActionを使っているのでStrutsだと推測して。。。 struts_config.xmlで <action path="/setting" type="XXX.SettingAction" name="settingForm"> </action> <action path="/setting2" type="XXX.SettingAction2" name="settingForm"> </action> のようにactionの属性「name」の値を同じにすれば同じFormを使うことができます
- osumitan
- ベストアンサー率33% (102/307)
javax.servlet.http.HttpSessionのgetAttribute/setAttributeを使えば そのような動きをすることはできるでしょう。 HttpServletRequestのライフサイクルは1回のリクエストですが HttpSessionはセッションと呼ばれるライフサイクルになります。 具体的にはServletコンテナがブラウザにセッションCookieを食わせていて そのCookieで同一セッションであることを識別しているので、 複数回のリクエストを結びつけることができます。 セッションCookieはブラウザのウィンドウをすべて閉じると削除されます。 またSetvletコンテナ側は一定時間リクエストがないとセッションを破棄します。 つまり、HttpSession#setAttributeでセットしたインスタンスは ブラウザをすべて閉じるか、タイムアウトでセッションが破棄されるか しないかぎり保持され、HttpSession#getAttributeで取得できます。 HttpSessionはJSP上なら暗黙で「session」という変数で取れますし、 Servlet上ならHttpServletRequest#getSessionで取得できます。
補足
すみません、以下のような流れをSessionで対応できるでしょうか? setting.jsp⇒settingForm(データ1が格納されている)⇒SettingAction(データ1のデータチェックを行い次の画面を表示)⇒setting2.jsp⇒settingForm(データ1は格納された状態で新たにデータ2も格納する)⇒SettingAction2(データ2のデータチェックを行い、データ1,2をDBに登録する)
補足
すみません、struts-config.xmlの設定はわかっていますが、setting1.jspとsetting2.jspで同じFormのインスタンスを使いたい場合、どうすればいいですか?