【问题标题】:@ModelAttribute annotated method WITH @ModelAttribute in method signature@ModelAttribute 注解的方法 WITH @ModelAttribute 在方法签名中
【发布时间】:2011-03-28 20:04:32
【问题描述】:

我想知道是否可以通过在方法签名中使用另一个 ModelAttribute 方法签名中的 @ModelAttribute 注释但不映射请求来链接 @ModelAttribute 方法。 这将在控制器中。

@ModelAttribute("attrOne")
public AttrOne getAttrOne() {
    return service.getAttOne();
}

@ModelAttribute("attrTwo")
public AttrTwo getAttrTwo(@ModelAttribute("attrOne") AttrOne attrOne){
    return anotherservice.getAttrTwo(attrOne);      
}

如果有一个请求映射的方法可以做到这一点:

@RequestMapping(method=RequestMethod.GET)
public String doSomething(@ModelAttribute("attrTwo") AttrTwo attrTwo )

这行得通吗?

我似乎在第二个带注释的方法中为 AttrOne 获得了一个空对象...因为第一个带注释的方法没有被第二个方法调用...

干杯

【问题讨论】:

  • 对于 getAttrTwo() 为什么需要通过 attrOne?您不能只进行相同的服务调用或缓存服务调用的结果吗?
  • 更多解释:我希望将这两个都放在一个超类控制器中,但在扩展控制器时覆盖第一个方法....

标签: java spring annotations


【解决方案1】:

我从 spring 文档中学习时遇到了同样的情况:

@ModelAttribute 也用于方法级别[..]。对于这种用法,方法签名可以包含与上面记录的 @RequestMapping 注释相同的类型。

我发现SPR-6299 面临这个问题。在 cmets 中,您可以通过提供 仅一个 @ModelAttribute 注释方法来找到解决方法,该方法将属性设置到模型中:

@ModelAttribute
public void populateModel(Model model) { 
  model.addAttribute("attrOne", getAttrOne());
  model.addAttribute("attrTwo", getAttrTwo());
}

【讨论】:

    【解决方案2】:

    根据SPR-6299,这将在 Spring 4.1 RC1 或更高版本中实现。

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 2021-04-12
      • 2018-01-10
      • 2014-09-20
      • 1970-01-01
      • 2016-09-25
      • 2012-12-20
      • 2012-12-02
      相关资源
      最近更新 更多