在Freemarker模板中显示Spring MVC验证错误 [英] Displaying Spring MVC validation errors in Freemarker templates

查看:99
本文介绍了在Freemarker模板中显示Spring MVC验证错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果控制器返回绑定错误,我试图在我的freemarker模板中显示全局验证错误的列表.我可以显示与字段相关的错误,但是我想检测特定bean内何时发生了错误,并在页面顶部显示一条消息.我尝试使用下面的示例不产生任何输出:

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>

即使提交的表单有错误,下面的行也总是返回0:

The line below always returns 0, despite there being errors with the submitted form:

${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方法如下:

The createMav method is below:

public ModelAndView createMav(BindingResult result) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName(getPrimaryControllerView());
    mav.addAllObjects(result.getModel());
    return mav;
}

有没有一种方法可以使用Freemarker + Spring MVC?

Is there a way to achieve this using Freemarker + Spring MVC?

推荐答案

我发现了使用标准MVC JSP taglib来实现此目的的一种round回方式.我将其提供给Freemarker:

I found a roundabout way to do this using the standard MVC JSP taglib. I make this available to Freemarker:

<#assign form=JspTaglibs["http://www.springframework.org/tags/form"] />

然后我使用以下宏显示全局错误消息:

I then use the following macro to display global error message:

<#macro formErrors>
    <#assign formErrors><@form.errors path="*" /></#assign>
    <#if formErrors?has_content>
        <div id="errors">
            <@spring.message "admin.error.globalMessage" />
        </div>
    </#if>
</#macro>

我只要将以下行显示在我希望此错误消息出现的位置即可(该行必须包含在提交给控制器的form元素中):

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):

<@form.form method="POST" commandName="webPage">

            <@formErrors />                        
            ....
</@form.form>

这篇关于在Freemarker模板中显示Spring MVC验证错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆