Spring 引导 Freemarker status.errorMessages 未填充

Spring Boot Freemarker status.errorMessages not populated

我正在尝试使用我的 spring 启动 mvc 应用程序进行模型验证。我使用 freemarker 作为视图模板。我现在的问题是,即使模型验证按预期工作,模型错误也没有显示在我的视图中。

这是一些示例代码。模特:

public class TestModel {
    @Size(min=2, max=10)
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

控制器

@Controller
@RequestMapping("/test")
public class OrderController extends BaseController {
    @RequestMapping(value = "new/greenhouse", method = RequestMethod.GET)
    public String get(@ModelAttribute TestModel testModel) {
        testModel.setName("Hello world");
        return "test.ftl";
    }

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String post(@ModelAttribute @Valid TestModel testModel, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            // The bindingResult contains the "correct" errors
            return "test.ftl";
        }
        return "redirect:/";
    }
}

观点:

<#import "../layout.ftl" as layout />
<#import "/spring.ftl" as spring />
<#import "../freemarker.ftl" as ftl />

<@layout.defaultLayout>

<form action="/test" method="post">
    <@ftl.csrfToken />

    Name:
    <@spring.formInput "testModel.Name" />
    <@spring.showErrors "<br>" /> <#-- Does not print the error as status.errorMessages is not populated -->

    <#-- This will at least display the default Message -->
    <#list spring.status.errors.allErrors as error>
        <span class="has-error">${error.defaultMessage} </span>
    </#list>
</form>
</@layout.defaultLayout>

知道为什么 status.errorMessages 没有被填充吗?

所以我终于找到了解决办法:

Freemarker 视图中的 属性 名称必须是小写的(模型中的私有成员名称也是如此 class)。正确的视图应该是这样的:

<@spring.formInput "testModel.name" />
<@spring.showErrors "<br>" />