【问题标题】:How to return multiple @ModelAttribute in spring annotated controllers?如何在 spring 注释控制器中返回多个 @ModelAttribute?
【发布时间】:2016-02-08 15:09:16
【问题描述】:

我正在将我的控制器转换为 spring mvc 中带注释的样式控制器。

基本上我在旧式控制器 simpleformcontroller 中执行此操作。

protected Map referenceData(HttpServletRequest request) throws Exception
{
    Map referenceData = new HashMap();

    List<ItemVo> lstItem1 = eqrManager
        .searchAllEqptCondQualItems("A1", "BOXES");
    List<ItemVo> lstItem2 = eqrManager
        .searchAllEqptFullQualItems("A2", "CANNED_GOODS");
    referenceData.put("BOX_ITEMS", lstItem1);
    referenceData.put("CANNED_ITEMS", lstItem2);
    return referenceData;
}

在注释中,我做了这样的事情:

@ModelAttribute("BOX_ITEMS")
public List<ItemVo> populateCondEQRItems() {
    List<ItemVo> lstCondQual = eqrManager
            .searchAllEqptCondQualItems("A1", "BOXES");
    return lstCondQual;
}

@ModelAttribute("CANNED_ITEMS")
public List<ItemVo> populateFullEQRItems() {
    List<ItemVo> lstFullQual = eqrManager
            .searchAllEqptFullQualItems("A2", "CANNED_GOODS");
    return lstFullQual;
}

我的问题是,有没有办法在一个方法中返回所有属性而不是 必须创建多个@ModelAttribute?就我而言,我需要注释 2 方法?如果我需要怎么办 3,我也应该创建3个带注释的方法吗?

【问题讨论】:

  • 你的最后两个方法中没有modelAttribute对象。如果你用@ModelAttribute注解了一个方法,它会在解析@ModelAttribute注解的方法参数之前被调用。
  • 您好,根据您的说法,我无法理解,请原谅我的理解。我从某处的链接中读到,如果您使用 @ModelAttribute 注释方法,这看起来像 simpleformcontroller 的 referencedata 工作流?我并没有真正将它用作@ModelAttribute 方法参数。谢谢。

标签: spring-mvc


【解决方案1】:

规则很明确

如果您需要多个模型属性,将模型作为输入参数

@RequestMapping(method=RequestMethod.GET)
public void setUp(Model model) {
    model.addAttribute("CANNED_ITEMS", eqrManager.searchAllEqptFullQualItems("A2", "CANNED_GOODS"))
         .addAttribute("BOX_ITEMS", eqrManager.searchAllEqptCondQualItems("A1", "BOXES"));
}

祝你好运!

【讨论】:

  • 嘿,它就像一个魅力..我开始喜欢这种注释风格的配置..谢谢谢谢..
【解决方案2】:

看不清楚

好的!我说@ModelAttribute 可以放在方法级别和方法参数级别。它的行为不同取决于你把它放在哪里。

    @ModelAttribute(user)
public void preRender(Model model) {
        /* this method will be invoked before resolving @ModelAttribute Method Parameter i.e. before invoking render/processCreate method */
       /* codes are available to CreateUser.jsp if render request comes */
       /* codes are available to CreateUser.jsp if validation fails */
        model.addAttribute("countryCodes", I18Nservice.getCountryISOCodes());
        model.addAttribute("languageCodes", I18Nservice.getLanguageISOCodes());
}

public String renderCreate(@ModelAttribute(value="user") User user) {
    return "/user/create";
}

@Override
public String processCreate(@ModelAttribute(value="user") User user, BindingResult result) {
           if(result.hasErrors() {
             return "/user/create";
           }
            securityService.createUser(user);
            return "/user/detail/user.getId()";
}

如果您是 Spring MVC 3 领域的新手:

  1. 阅读Web MVC framework
  2. 检查@RequestMapping JavaDoc
  3. Petcinic & mvc-showcase一起玩

【讨论】:

  • 。谢谢你。我开始喜欢这个网站了。希望你能对像我这样的新手有所帮助。
猜你喜欢
  • 2012-12-02
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2018-12-12
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多