在 Freemarker 模板中显示 Spring MVC 验证错误
如果控制器返回绑定错误,我试图在我的 freemarker 模板中显示全局验证错误列表。我可以显示与字段关联的错误,但我想检测特定 bean 中何时发生错误并在页面顶部显示一条消息。我尝试使用下面的示例,该示例不产生任何输出:
<@spring.bind "webPage" />
....
<#if spring.status.error>
There were problems with the data you entered:
<ul>
<#list spring.status.errorMessages as error>
<li>${error?html}</li>
</#list>
</ul>
</#if>
尽管提交的表单存在错误,下面的行始终返回 0:
${spring.status.errorMessages?size}
我的控制器代码如下:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("webPage") @Valid WebPage page, BindingResult result, Model model) {
if (!model.containsAttribute("site")) {
throw new IllegalArgumentException("Model must contain site attribute.");
}
Site site = (Site) model.asMap().get("site");
if (!result.hasErrors() && !page.isNew()) {
this.pageService.save(page, site);
} else if (!result.hasErrors() && page.isNew()) {
this.pageService.create(page, site);
}
return createMav(result);
}
createMav 方法如下:
public ModelAndView createMav(BindingResult result) {
ModelAndView mav = new ModelAndView();
mav.setViewName(getPrimaryControllerView());
mav.addAllObjects(result.getModel());
return mav;
}
有没有办法使用 Freemarker 来实现此目的+ Spring MVC?
I'm trying to display a list of global validation errors in my freemarker template if a controller returns binding errors. I can display errors that are associated with a field, but I want to detect when an error has occurred within a specific bean and display a message at the top of the page. I've tried using the example below which produces no output:
<@spring.bind "webPage" />
....
<#if spring.status.error>
There were problems with the data you entered:
<ul>
<#list spring.status.errorMessages as error>
<li>${error?html}</li>
</#list>
</ul>
</#if>
The line below always returns 0, despite there being errors with the submitted form:
${spring.status.errorMessages?size}
My controller code is below:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("webPage") @Valid WebPage page, BindingResult result, Model model) {
if (!model.containsAttribute("site")) {
throw new IllegalArgumentException("Model must contain site attribute.");
}
Site site = (Site) model.asMap().get("site");
if (!result.hasErrors() && !page.isNew()) {
this.pageService.save(page, site);
} else if (!result.hasErrors() && page.isNew()) {
this.pageService.create(page, site);
}
return createMav(result);
}
The createMav method is below:
public ModelAndView createMav(BindingResult result) {
ModelAndView mav = new ModelAndView();
mav.setViewName(getPrimaryControllerView());
mav.addAllObjects(result.getModel());
return mav;
}
Is there a way to achieve this using Freemarker + Spring MVC?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了一种使用标准 MVC JSP 标记库来完成此操作的迂回方法。我将其提供给 Freemarker:
然后使用以下宏来显示全局错误消息:
我只需将以下行放置在我希望出现此错误消息的位置(这必须包含在提交到控制器的表单元素中) :
I found a roundabout way to do this using the standard MVC JSP taglib. I make this available to Freemarker:
I then use the following macro to display global error message:
I just place the following line where ever I want this error message to appear (this has to be contained within the form element that submits to the controller):
您可以编写如下:
更多信息位于 BindStatus 和 错误类。
You can write as follows:
More info at BindStatus and Errors classes.
尝试这样的事情:
Try something like this:
请参阅文档: http ://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms。它有一个你想要做什么的例子。
See the documentation: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms. It has an example of what you want to do.