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>" />
我正在尝试使用我的 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>" />