【问题标题】:Using @ModelAttribute for reference data - avoid binding使用 @ModelAttribute 获取参考数据 - 避免绑定
【发布时间】:2011-03-22 04:43:39
【问题描述】:

我想使用@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 设置为宠物的名字。如何避免这种情况?

【问题讨论】:

  • “假定为表单支持对象”是什么意思?有任何不良行为的例子吗?

标签: spring spring-mvc annotations


【解决方案1】:

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

【讨论】:

  • 是的,我可能只需要做一些完全不同的事情。
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2019-09-29
  • 2017-10-03
  • 2021-08-02
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多