Spring会话模型属性命名对话

时间:2016-05-20 03:20:17

标签: spring spring-mvc session session-variables modelattribute

将会话模型属性声明为:

@SessionAttributes ("customer")

控制器代码基本上是修改客户对象:

@RequestMapping(value="/testlink", method=RequestMethod.GET)
public String testLinkHandler(ModelMap modelMap){
    customerDao.getCustomer(111);
    modelMap.put("customers", customerDao.getCustomers());
    Customer cust = customerDao.getCustomer(115);
    if (cust == null){
        cust = new Customer();
    }
    modelMap.put("customer", cust);
    return "testlink";
}
@RequestMapping(value="/testlink", method=RequestMethod.POST)
public String testLinkHandler(@ModelAttribute Customer customer){
    customerDao.save(customer);
    return "redirect:/testlink";
}

使用POST方法中的上述代码,客户对象从会话&发布了具有正确ID的新客户名称,因此编辑客户工作完美,并使用修改后的客户名称更新数据库。

但是,当我将模型变量名称和@SessionAttribute名称从"customer"更改为"customerModel""customer_model""model"时,它就不会继续工作以上代码在DB中插入新记录。

所以问题是,这里是否需要遵循命名约定?

3 个答案:

答案 0 :(得分:1)

public String testLinkHandler(@ModelAttribute Customer customer){ ... }

此方法需要名为customer的对象可用于绑定。使用没有属性的@ModelAttribute时,Spring MVC会尝试从方法参数名称中推断出模型属性的名称。

现在,如果您决定重命名模型属性,则必须

  1. 相应地重命名方法参数
  2. 将名称提供给@ModelAttribute
  3. 由于我不建议选项1,因此留下选项2。

    public String testLinkHandler(@ModelAttribute("your-model-name-here") Customer customer){ ... }
    

答案 1 :(得分:0)

使用@SessionAttribute,Spring从session获取模型属性的实例。

因此,模型属性字段名称应与会话属性名称匹配,在本例中为customer

答案 2 :(得分:0)

如果您需要更改属性名称,则可以使用:

@SessionAttributes (types = {Customer.class})

现在,无论何时在Spring模型中放置Customer类型的modelClass,它都会自动在会话中设置。