将会话模型属性声明为:
@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中插入新记录。
所以问题是,这里是否需要遵循命名约定?
答案 0 :(得分:1)
public String testLinkHandler(@ModelAttribute Customer customer){ ... }
此方法需要名为customer
的对象可用于绑定。使用没有属性的@ModelAttribute
时,Spring MVC会尝试从方法参数名称中推断出模型属性的名称。
现在,如果您决定重命名模型属性,则必须
@ModelAttribute
。 由于我不建议选项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,它都会自动在会话中设置。