2012-02-02 19 views
0

Spring mvcアプリケーションで2つのコントローラ間でデータを共有しようとしています。コントローラAIにおいて@SessionAttributesを使用するためのベストプラクティス

は@SessionAttributesのクラスを注釈を付けた({「mymodel1」})とIはModelMapに追加最初のGET要求を受信する方法において:

model.addAttribute("mymodel1", MyModel1); 

今読みたいですこのコントローラのコントローラB. からmyModel1私はPOSTリクエストをインターセプトし、すでにそのパラメータの異なるモデルを持って、次の方法があります。この時点まで

public String processSubmit(@ModelAttribute("mymodel2") MyModel2 mymodel2, BindingResult result, SessionStatus status, HttpServletRequest httpRequest) 

をすべてが正常に動作し、私はmymodel2を読み取ることができていますしかし、私が今、別の@ModelAttribute( "mymodel1")MyModel1 mymodel1をこのメソッドのシグネチャに追加したい場合は、コントローラAで設定していた値を読み取ることができるはずですが、最初のモデルもはや認識されない。

私の質問は、コントローラBからmymodel2をどのように読み取ることができますか?

答えて

1

あなたが行うことができない@SessionAttributesと:

セッションはこの注釈を使用して示されているように、透過的に会話セッションに保存されたばかりの属性の特定のハンドラモデルに対応する属性。これらの属性は、ハンドラが会話セッションの完了を示すと削除されます。したがって、特定のハンドラ会話の過程でセッションに一時的に格納されるはずの会話属性にこの機能を使用します。私はHibernateの検証を持つ要素を検証する際

は、例えば、私は、このアノテーションを使用し、私はページを提出し、いくつかの要素が無効になった後、私は残りの部分はページにまだなりたいが、これはあなたのケースではありません。上記のjavadocの抜粋が@SessionAttributesが使用されている最も一般的な方法である

HttpSession.getAttribute() 
+0

私は、Springが良い古いHttpSession以外のセッション属性の格納と検索にもっと賢い手段を提供できると思ったでしょう。 @SessionAttributesでモデルBeanにタグを付けるとどうなるのですか? – Joly

+0

@Joly実際には動作しないと思われます。 – Eugene

1

:私はそれを行うための唯一の方法は、とのことだと思います。しかし、Jolyが記述していることもうまくいくはずです。セッション属性はDefaultSessionAttributeStore経由で格納されます。デフォルトでは、属性名はセッションに格納されるときにプレフィックス名の前に付きません。つまり、ControllerAとControllerBの両方に "mymodel1"という属性がリストされている場合、実際には同じセッション属性を参照しています。取得しているエラーと実際のコントローラコードに関する情報をもう少し提供する必要があります。

+0

これはどのように動作するのかを示すコード例がありますか? MyModel1に@SessionAttributesを注釈すると仮定します。私は同じインスタンスをリストしていることを確認するために何をする必要がありますか?リストを作成するには、最初に両方のコントローラでモデルを作成し、モデルの異なるインスタンスを作成する必要があると私は理解しています。 – Joly

関連する問題