我正在使用Kotlin,Spring Boot 2.0.4和Thymeleaf构建教学项目。
要点很简单:
首先,showForm()使用输入选项填充模型并返回视图:
@GetMapping
fun showForm(model: Model): String {
model.addAttribute(
"options",
listOf(
Option("1", "Option 1"),
Option("2", "Option 2")
)
)
model.addAttribute("design", Design()) // This will be used for th:object
return "form"
}
第二,视图会生成选项复选框:
<form method="POST" th:object="${design}">
...
<div th:each="option: ${options}">
<input type="checkbox" name="options" th:value="${option.id}" />
...
</div>
...
</form>
最后,控制器验证提交的表单,如果有错误,则返回原始表单:
@PostMapping
fun processForm(@Valid design: Design, result: BindingResult): String {
if (result.hasErrors()) {
return "form"
}
return "redirect:/somewhere/else"
}
我遇到的问题是,只要Spring出现错误使我反弹,我的选项复选框就会消失。在我看来,模型属性似乎丢失了。
如果我在用错误发送回之前尝试用属性重新填充模型,错误本身就会丢失。
我如何实现验证,以便即使验证错误,模型属性和错误仍然存在?