【问题标题】:Spring MVC session Attribute set intiallySpring MVC session 最初设置的属性
【发布时间】:2013-08-26 05:55:47
【问题描述】:

我使用过 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),它工作正常。但如果我没有去 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());
                }

    }

这个方法最初也没有被调用 我的硬币控制器看起来像

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

是否可以在控制器的构造函数中设置 sessionAttribute 值?或任何其他方式来初始设置会话属性?

提前感谢您的帮助。

【问题讨论】:

  • 你的用例是什么?
  • 抱歉用例是什么意思?我必须在加载控制器时设置会话属性值
  • 你不能。控制器可能会在与用户的第一次会话开始之前很久就被加载。控制器的生命周期比会话的生命周期更宽。
  • 那么如何设置控制器中所有请求映射使用的会话属性值

标签: java spring spring-mvc


【解决方案1】:

假设您的 createDefaultClient 在控制器中,请为其添加 @ModelAttribute 注释。

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

此方法将在任何请求处理方法之前调用(如reference guide 中所述)

如果你将它与你的类上的 @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-09-18
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多