我想使用@ModelAttribute
的自动装配魔法来获取和传递参考数据。这样做的问题是,使用@ModelAttribute
添加到模型中的任何内容都被假定为表单支持对象,然后绑定到请求,可能会修改对象。
我只是希望将它们添加到模型中以供视图参考,并且能够使用参数级别@ModelAttribute
将对象连接到使用@RequestMapping
注释的方法。有没有办法在没有冗长@InitBinder
方法的情况下实现这一目标?
例如:
@ModelAttribute("owner")
public Person getOwner(@PathVariable("ownerId") Integer ownerId){
return getOwnerFromDatabaseById(ownerId);
}
@RequestMapping("/{ownerId}/addPet.do")
public ModelAndView addPet(HttpServletRequest request, @ModelAttribute("owner") Person owner){
String name = ServletRequestUtils.getStringParameter(request, "name");
Pet pet = new Pet();
pet.setName(name);
pet.setOwner(owner);
saveToDatabase(pet);
}
将宠物添加到所有者的简单示例。我希望将所有者放置在视图中使用的模型中,并且我还想在addPet()
中使用自动装配参数。假设Pet
和Person
都有成员name
。在这种情况下,owner
会自动绑定到请求,并将其name
设置为宠物的名称。如何避免这种情况?
答案 0 :(得分:0)
我认为你做错了,在这种情况下@ModelAttribute应该是Pet - 这应该被用作表单支持对象。要根据ownerId自动填充所有者,您可以为Owner类注册属性编辑器,该编辑器将具有您当前在getOwner方法中具有的逻辑。