首页 > 解决方案 > Spring MVC 自动绑定无法访问 thymeleaf 中的地图数据

问题描述

我是java新手,正在尝试在springboot中测试百里香。使用第一个控制器之类的代码,我可以通过 thymeleaf 访问地图中的数据

但无法通过第二个控制器访问地图中的数据。为什么像第二种方法一样声明地图不起作用?有人能帮我吗?谢谢

public class ViewController {
public String index(Map<String, Object> map) {
    map.put("hello","Bonjour");
    map.put("Users", Arrays.asList("Ken","Yu","JY"));       
    return "index";
}

}

public class ViewController {
public String index() {
    Map<String, Object> map=new HashMap<String, Object>();
    map.put("hello","Bonjour");
    map.put("Users", Arrays.asList("Ken","Yu","JY"));   
    return "index";
}
}

标签: spring-boot

解决方案


Springboot 遵循模型视图控制器(MVC)架构。简单地说,模型用于为要渲染的视图提供属性。这里使用 thyme-leaf 作为视图渲染器,同时将模型馈送到 thyme-leaf 模板中。Model、ModelMap 和 ModelAndView 用于定义模型在 Spring MVC 应用程序中。Spring boot 自动负责将视图和模型绑定在一起。

因此,springboot@RequestMapping处理程序方法期望模型的方法参数为:

java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap 用于丰富向 Web 视图公开的隐式模型。

文档

因此,如果您提供地图作为方法参数,它会自动绑定视图。在第二种情况下,它不会自动发生。这就是第二种方法不起作用的原因。使用 ModelAndView 的示例:

@GetMapping("/goToIndexPage")
public ModelAndView methodWithModelAndViewReturn() {
    ModelAndView modelAndView = new ModelAndView("index");
    modelAndView.addObject("message", "Hello");
    return modelAndView;
}

推荐阅读