在Spring MVC和Spring Boot中,如果你的控制器方法参数被标注为一个Java对象,并且该对象的字段与表单输入字段的名称匹配,Spring会自动将表单数据绑定到该对象上。这种机制称为数据绑定(Data Binding)。
假设你有一个表单如下:
- <form id="searchForm" th:action="@{/search}" method="get">
- <input id="nameInput" type="text" name="name" placeholder="Name" required>
- <input id="idInput" type="text" name="id" placeholder="ID" required>
- <button type="submit">Search</button>
- </form>
你的控制器方法可以定义为:
- @Controller
- public class SearchController {
-
- @GetMapping("/search")
- public String search(User user, Model model) {
- // user 对象会自动填充表单提交的数据
- // 你的处理逻辑
- model.addAttribute("result", searchService.search(user));
- return "searchResults";
- }
- }
假设你有一个 User
类:
- public class User {
- private String name;
- private String id;
-
- // getters and setters
- }
在这种情况下,当表单提交时,Spring会自动将表单数据绑定到 User
对象上。这是因为表单中的 name
属性与 User
类中的字段名称匹配。
实体类:
- public class User {
- private String name;
- private String id;
-
- // getters and setters
- }
控制器:
- @Controller
- public class SearchController {
-
- @GetMapping("/search")
- public String search(User user, Model model) {
- // 表单数据已经被绑定到 user 对象
- // 处理逻辑
- model.addAttribute("result", searchService.search(user));
- return "searchResults";
- }
- }
表单:
- <form id="searchForm" th:action="@{/search}" method="get">
- <input id="nameInput" type="text" name="name" placeholder="Name" required>
- <input id="idInput" type="text" name="id" placeholder="ID" required>
- <button type="submit">Search</button>
- </form>
这样,当你提交表单时,Spring会自动将 name
和 id
字段的值填充到 User
对象的对应字段中。你可以在控制器方法中直接使用这个 User
对象来处理业务逻辑。
在前端通过表单提交数据时,如果你同一前端页面中有其他表单设置了阻止超链接的默认行为,导致其他功能的表单无法提交。
你可以选择通过具体的表单名字取阻止默认行为
-
- <form id="deleteFrom" method="post">
-
- <input type="hidden" name="_method" value="delete">
- form>
- ============================================
- var vue = new Vue({
- el:"#app",
- methods:{
-
- deleteUser(event){
- //获取form 表单
- var form = document.getElementById("deleteFrom");//通过具体的id
- //将超链接的href属性赋值给form表单的action属性
- //event.target表示当前触发事件的标签
- form.action = event.target.href;
- //表单提交
- form.submit();
- //阻止超链接的默认行为
- event.preventDefault();
- }
-
- }
- });
而不是下面这种方法
var form = document.getElementById().from[0];
如果是通过在地址后面添加变量的方法获取数据
要注意在Controller类对应方法传递数据时要在形参前面加上
@PathVariable(“变量名字”)