1

Spring MVC を使用しました。セッション属性値を次のように設定します

@RequestMapping(value = "/home", method = RequestMethod.GET)
        public String initHome(Model model) {
            if (!model.containsAttribute("clientObject")) {
                model.addAttribute("clientObject", createDefaultClient());
            }
            return "homeMenu";
        }

ホームメニューのURL(/home)をクリックするとうまくいきます。しかし、家に帰らなかった場合、「セッション属性clientObjectが必要です」というエラーが表示されます

だから私はコントローラーのコンストラクターでセッション属性を設定することにしました

 @Autowired
    public MyController(Model model) {
       if (!model.containsAttribute("clientObject")) {
            model.addAttribute("clientObject", createDefaultClient());
        }
    }

それはエラーとも言います

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myController'

RequestMapping も好きで使って設定してみました

 @RequestMapping(value = "/", method = RequestMethod.GET)
    public void initController(Model model) {
       if (!model.containsAttribute("clientObject")) {
                    model.addAttribute("clientObject", createDefaultClient());
                }

    }

このメソッドも最初は呼び出されません私のcointrollerは次のように見えます

@RequestMapping("/sample")
public class MyController {
    ..
    ..

コントローラーのコンストラクターで sessionAttribute 値を設定することは可能ですか? またはセッション属性を最初に設定する他の方法はありますか?

よろしくお願いします。

4

1 に答える 1

3

あなたがコントローラーにいると仮定して、それに注釈をcreateDefaultClient追加します。@ModelAttribute

@ModelAttribute("clientObject")
public ClientObject createDefaultClient() { ... }

このメソッドは、リクエスト処理メソッドの前に呼び出されます (リファレンス ガイドで説明されています) 。

それをクラスの注釈と組み合わせると@SessionAttribute(すでに持っている可能性があります)。あなたはあなたが望むものを達成できるはずです。

リクエスト処理メソッド (@RequestMapping でアノテーションが付けられたメソッド) で、クライアント オブジェクトをメソッド引数として単純に注入できるようになりました。

@RequestMapping(value = "/home", method = RequestMethod.GET)
public String initHome(@ModelAttribute("clientObject") ClientObject clientObject) {
    // Do something with the clientObject
    return "homeMenu";
}

これは同じコントローラー内でのみ一貫して機能するため、ClientObject別の場所 (別のコントローラーなど) で使用する必要がある場合、これは機能しません (また@SessionAttributes、そのように設計されていません)。

于 2013-08-26T09:08:56.443 に答える