Spring 3 で Session スコープのモデルが必要な場合は、foll を使用します。コントローラーの注釈:-
@SessionAttribute("myModel");
ただし、これは myModel の宣言にすぎません。ビューで使用できるように、どの時点で初期化されますか。そして、Spring はどのようにしてこのモデルのクラス型を知るのでしょうか?
誰かがこれを例で説明できますか?
Spring 3 で Session スコープのモデルが必要な場合は、foll を使用します。コントローラーの注釈:-
@SessionAttribute("myModel");
ただし、これは myModel の宣言にすぎません。ビューで使用できるように、どの時点で初期化されますか。そして、Spring はどのようにしてこのモデルのクラス型を知るのでしょうか?
誰かがこれを例で説明できますか?
@SessionAttribute
次のように動作します。
@SessionAttribute
対応する属性をモデルに入れると (明示的に、または@ModelAttribute
-annotated メソッドを使用して) 初期化されます。
@SessionAttribute
署名に対応するモデル属性を持つコントローラー メソッドが呼び出されると、HTTP パラメーターからのデータによって更新されます。
@SessionAttribute
s は、コントローラー メソッドに引数として渡されたオブジェクトsetComplete()
を呼び出すとクリアされます。SessionStatus
例:
@SessionAttribute("myModel")
@Controller
public class MyController {
@RequestMapping(...)
public String displayForm(@RequestParam("id") long id, ModelMap model) {
MyModel m = findById(id);
model.put("myModel", m); // Initialized
return ...;
}
@RequestMapping(...)
public String submitForm(@ModelAttribute("myModel") @Valid MyModel m,
BindingResult errors, SessionStatus status) {
if (errors.hasErrors()) {
// Will render a view with updated MyModel
return ...;
} else {
status.setComplete(); // MyModel is removed from the session
save(m);
return ...;
}
}
}
@ModelAttribute でメソッドにアノテーションを付けることができます。属性名が @SessionAttribute アノテーションで指定されたものと同じ場合、属性はセッションに保存されます。完全な例を次に示します。
@Controller
@RequestMapping(value = "/test.htm")
@SessionAttributes("myModel")
public class DeleteNewsFormController {
// Add you model object to the session here
@ModelAttribute("myModel")
public String getResultSet() {
return "Hello";
}
//retreive objects from the session
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody testMethod(@ModelAttribute("resultSet") String test, Model model) {