【问题标题】:how does spring manage to populate objects from view to controller?Spring如何设法将对象从视图填充到控制器?
【发布时间】:2021-02-13 20:13:00
【问题描述】:

有人可以向我解释一下 spring 如何从视图中的表单填充对象吗?

看看我的例子

人物类:

public class Person {

    private String name;
    private String password;

    /*
    constructors, getters and setters
    */
}

控制器:

@Controller
@RequestMapping("/")
public class HomeController {

    @GetMapping
    public String showForm() {
        return "form";
    }

    @PostMapping
    public String processForm(@ModelAttribute("person") Person person) {
        return "displayForm";
    }
}

form.html:

<body>
    <form method="post">
        <label for="name">Name:</label>
        <input type="text" name="name">
        <label for="password">password:</label>
        <input type="text" name="password">
        <input type="submit">
    </form>
</body>

displayform.html:

<body>
    <label for="name">Name:</label>
    <span th:text="${person.name}"></span>
    <br>
    <label for="password">Password:</label>
    <span th:text="${person.password}"></span>
</body>

我在想这个例子会返回一个空对象,但它确实有效。

问题是 spring 如何在不为表单定义 th:object=${person} 表单属性的情况下填充人员?

【问题讨论】:

  • 由于&lt;input&gt; 元素中的name 属性,表单值绑定到Person 的字段。如果名称与 Person 字段不匹配,则 Person 对象将包含空值。 th: 只是一种显示数据的方式,因此对表单提交毫无帮助。

标签: java spring spring-boot thymeleaf


【解决方案1】:

在 Spring Web MVC 中,DispatcherServlet 类作为前端控制器。负责管理spring mvc应用的流程。

整个流程如下-

  1. DispatcherServlet 将收到第一个请求。

  2. DispatcherServlet 将在HandlerMapping 的帮助下了解与给定请求关联的控制器类名称。

  3. 现在请求转移到Controller,然后控制器将通过执行适当的方法处理请求并将ModelAndView对象(包含模型数据和视图名称)返回给DispatcherServlet

  4. DispatcherServlet 将模型对象发送到ViewResolver 以获取实际的视图页面。

  5. 在最后一步DispatcherServlet 会将Model object 传递给查看页面以显示结果。

【讨论】:

  • 欣赏这里的大局,但我问的是细节。
猜你喜欢
  • 2021-09-15
  • 2013-08-30
  • 2011-09-06
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
相关资源
最近更新 更多