使用@ModelAttribute作为参考数据 - 避免绑定

时间:2011-03-22 04:43:40

标签: spring spring-mvc annotations

我想使用@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()中使用自动装配参数。假设PetPerson都有成员name。在这种情况下,owner会自动绑定到请求,并将其name设置为宠物的名称。如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

我认为你做错了,在这种情况下@ModelAttribute应该是Pet - 这应该被用作表单支持对象。要根据ownerId自动填充所有者,您可以为Owner类注册属性编辑器,该编辑器将具有您当前在getOwner方法中具有的逻辑。