在 Freemarker 模板中显示 Spring MVC 验证错误
Posted
技术标签:
【中文标题】在 Freemarker 模板中显示 Spring MVC 验证错误【英文标题】:Displaying Spring MVC validation errors in Freemarker templates 【发布时间】:2011-11-25 06:49:06 【问题描述】:如果控制器返回绑定错误,我将尝试在我的 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 来实现这一点?
【问题讨论】:
【参考方案1】:试试这样的:
<@spring.bind "webPage" />
<#if (spring.status.errors.allErrors?size > 0) >
<@spring.message "my.global.error.code"/>
</#if>
【讨论】:
【参考方案2】:你可以这样写:
<#if spring.status.error>
<ul>
<#list spring.status.errors.globalErrors as error>
<li>$error.defaultMessage</li>
</#list>
</ul>
</#if>
更多信息请访问BindStatus 和Errors 课程。
【讨论】:
【参考方案3】:我找到了一种使用标准 MVC JSP 标签库的迂回方法。我将它提供给 Freemarker:
<#assign form=JspTaglibs["http://www.springframework.org/tags/form"] />
然后我使用以下宏来显示全局错误消息:
<#macro formErrors>
<#assign formErrors><@form.errors path="*" /></#assign>
<#if formErrors?has_content>
<div id="errors">
<@spring.message "admin.error.globalMessage" />
</div>
</#if>
</#macro>
我只需将以下行放在我希望出现此错误消息的位置(这必须包含在提交给控制器的表单元素中):
<@form.form method="POST" commandName="webPage">
<@formErrors />
....
</@form.form>
【讨论】:
【参考方案4】:请参阅文档:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms。它有一个你想做什么的例子。
【讨论】:
我可能弄错了,但文档解释了如何在绑定字段旁边输出错误消息。我需要检测是否发生了验证失败并在页面顶部显示一条消息,在任何字段绑定之前。以上是关于在 Freemarker 模板中显示 Spring MVC 验证错误的主要内容,如果未能解决你的问题,请参考以下文章