java - Spring @ModelAttribute 不应该将属性添加到 View 中吗?

标签 java spring spring-mvc modelattribute

据我了解,@ModelAttribute注释用于将属性放在 View 模型的右侧。我找到了名为 Handling form submission 的官方 Spring 指南还有一个带有 @ModelAttribute 的简单 Controller 示例:

@Controller
public class GreetingController {

    @RequestMapping(value="/greeting", method=RequestMethod.GET)
    public String greetingForm(Model model) {
        model.addAttribute("greeting", new Greeting());
        return "greeting";
    }

    @RequestMapping(value="/greeting", method=RequestMethod.POST)
    public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) {
        model.addAttribute("greeting", greeting);
        return "result";
    }

}

为什么在最后一个方法中要手动添加 model 属性?由于 @ModelAttribute,它不应该已经存在吗?

最佳答案

当您在返回值的方法中使用@ModelAttribute时,Spring会将该值添加到模型中,然后您可以在 View 中使用它。

@ModelAttribute("countries")
public List findAllCountries() {
   return countryService.findAllCountries();
}

但是如果你在用requestMapping注释的方法中将它用作方法参数,Spring将在jsp页面中关联表单。在这段代码中

@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greetingSubmit(@ModelAttribute Greeting greeting, Model model)    {
    model.addAttribute("greeting", greeting);
    return "result";
}

您正在获取表单值,因此需要将其添加到模型中才能在 View 中使用该值。

关于java - Spring @ModelAttribute 不应该将属性添加到 View 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029244/

相关文章:

java - AVRO 类转换异常

Java:将日期解析为可能包含也可能不包含时区信息的字符串

java - 关于 Spring 3 autoscan 和 required annotation 的问题

java - 使用Spring的SockJsClient编写一个java websocket客户端

java - Spring MVC 4 : "application/json" Content Type is not being set correctly

java - 分割正则表达式;保留分隔符

java - 需要 Spring 版本# - 只有 spring.jar 文件

java - 如何使用 spring data、hibernate 为映射实体创建自定义查询?

java - Spring4中需要xml bean的java表示

java - Spring FileSystemXmlApplicationContext 找不到bean配置文件并出错