Thymeleaf中th:field绑定表单值无法提交到Spring控制器问题求助
问题排查与修复方案
核心故障原因
你当前的Customer实体类的set方法存在语法错误,未正确给类的成员变量赋值。Spring MVC通过@ModelAttribute绑定表单参数时,依赖反射调用set方法完成属性注入,set方法逻辑错误会导致注入后成员变量仍为null。
错误的setter代码如下:
public void setFirstName(String firstName) { firstName = firstName; } public void setLastName(String lastName) { lastName = lastName; }
上述代码的赋值操作是把形参赋值给形参本身,没有操作类的成员变量,修改为正确写法即可:
public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; }
其他潜在问题补充
- 你的GET接口
showAllCustomers中只往Model里添加了customer属性,但页面上遍历的${customers}属性没有添加,会导致页面列表渲染异常,需要补充查询所有用户的逻辑后把结果存入Model:
@RequestMapping(value = "user", method = RequestMethod.GET) public String showAllCustomers(Model model) { model.addAttribute("customer", new Customer()); // 补充查询所有用户的逻辑 model.addAttribute("customers", repository.findAll()); return "DisplayCustomerAll"; }
- 不要直接调用Repository的静态方法,需要先注入Repository实例再调用,同时建议提交后重定向到GET接口刷新页面,避免刷新页面重复提交表单:
// 先注入Repository实例 @Autowired private CustomerRepository repository; @PostMapping("/create") public String saveStudent(@ModelAttribute Customer customer) { repository.save(customer); return "redirect:/user"; }
内容的提问来源于stack exchange,提问作者HoustonWeHaveAProblem
相关产品推荐
相关产品推荐

