1

Spring 3 で Session スコープのモデルが必要な場合は、foll を使用します。コントローラーの注釈:-

    @SessionAttribute("myModel");

ただし、これは myModel の宣言にすぎません。ビューで使用できるように、どの時点で初期化されますか。そして、Spring はどのようにしてこのモデルのクラス型を知るのでしょうか?

誰かがこれを例で説明できますか?

4

2 に答える 2

7

@SessionAttribute次のように動作します。

  • @SessionAttribute対応する属性をモデルに入れると (明示的に、または@ModelAttribute-annotated メソッドを使用して) 初期化されます。

  • @SessionAttribute署名に対応するモデル属性を持つコントローラー メソッドが呼び出されると、HTTP パラメーターからのデータによって更新されます。

  • @SessionAttributes は、コントローラー メソッドに引数として渡されたオブジェクト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 ...;
        }

    }
}
于 2011-12-27T14:19:08.490 に答える
0

@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) {
于 2011-12-27T14:14:39.720 に答える