刚得到一个奇怪的行为,用springmvc和thymleaf验证了一个非常简单的html表单。
我有这个方法用于编辑页面呈现和提交表单句柄。
@GetMapping("/{id}")
public String editPage(@PathVariable("id") Long id, Model model) {
model.addAttribute("user", userService.findById(id)
.orElseThrow(NotFoundException::new));
return "user_form";
}
@PostMapping("/update")
public String update(@Valid UserRepr user, BindingResult result, Model model) {
logger.info("Update endpoint requested");
if (result.hasErrors()) {
return "user_form";
}
userService.save(user);
return "redirect:/user";
}
update()方法中的连线是,在出现验证错误的情况下,具有表单内容的模型的属性的名称为“userrepr”,而不是我所期望的“user”,因此thymleaf表单视图失败。
通过重命名属性很容易解决这个问题,但是对于这种属性命名有什么约定吗?它是可变的吗?
1条答案
按热度按时间wdebmtf21#
你可以使用
@ModelAttribute
.@modelattribute用于将方法参数或方法返回类型Map/绑定到命名的模型属性。请参阅@modeldattributes javadoc。这是Spring注解。
为什么看起来像这样?
模型对象自动生成属性名,然后将上述方法调用转发给
addAttribute(Object attributeValue)
.以下是名称生成策略的规则:
对于不是集合的对象,将生成短类名。例如,对于java.lang.string,将生成“string”。
对于集合/数组,“list”附加在其中元素的类型之后,例如“stringlist”。集合/数组不应为空,因为逻辑使用第一个元素查找其类型。
有关详细信息,请查看此链接。https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/spring-model-attribute-generated-names.html