【问题标题】:Displaying Spring MVC validation errors in Freemarker templates在 Freemarker 模板中显示 Spring MVC 验证错误
【发布时间】: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 来实现这一点?

【问题讨论】:

    标签: spring model-view-controller validation freemarker


    【解决方案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>
      

      更多信息请访问BindStatusErrors 课程。

      【讨论】:

        【解决方案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】:

          【讨论】:

          • 我可能弄错了,但文档解释了如何在绑定字段旁边输出错误消息。我需要检测是否发生了验证失败并在页面顶部显示一条消息,在任何字段绑定之前。
          猜你喜欢
          • 2017-01-15
          • 2011-04-21
          • 2015-11-24
          • 1970-01-01
          • 2014-09-23
          • 2017-10-04
          • 1970-01-01
          • 2014-10-17
          • 2021-08-26
          相关资源
          最近更新 更多