在Spring Boot控制器中验证Thymeleaf的th:object中的输入

时间:2018-09-10 05:15:08

标签: spring spring-boot kotlin thymeleaf

我正在使用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出现错误使我反弹,我的选项复选框就会消失。在我看来,模型属性似乎丢失了。

如果我在用错误发送回之前尝试用属性重新填充模型,错误本身就会丢失。

我如何实现验证,以便即使验证错误,模型属性和错误仍然存​​在?

0 个答案:

没有答案