在Velocity模板上显示所有Spring表单错误

时间:2011-06-29 17:07:09

标签: spring validation forms spring-mvc velocity

我有一个使用Spring MVC和Velocity的应用程序。在我的一个表单上,我想在页面顶部显示与表单相关的所有错误。我已经弄清楚如何显示与某个特定字段相关的错误(使用#springShowErrors宏),但我真的希望在表单顶部有一大块错误,而不是列出每个单独项目旁边的错误

我做了很多谷歌搜索,有些人建议像

#if ($status && $status.errors.hasErrors())
#foreach( $error in $status.errorMessages )
<p>$error</p>
#end
#end

...但是当放置在将命令对象附加到表单的初始#springBind宏之下时,这不会给出任何输出。在每个字段的#springFormInput宏之后放置#springShowErrors工作正常,所以我知道我的验证器正在运行并产生错误。

有什么想法吗?我错过了一些非常愚蠢的东西吗?

这是完整的表单,我的非工作尝试就在第一个#springBind

之后
<form name="standardForm" id="standardForm" method="post" action="#springUrl("/requestAccess")">
            #springBind("accessRequest")
#if ($status && $status.errors.hasErrors())
#foreach( $error in $status.errorMessages )
<p>$error</p>
#end
#end

            <fieldset>

                  <label for="name">Name</label>

                  #springFormInput("accessRequest.name" " ")


                  <label for="company">Company</label> 

                  #springFormInput("accessRequest.company" " ")

                  <label for="title">Title</label> 
                  #springFormInput("accessRequest.title" " ")

                  <label for="email">Email</label> 

                  #springFormInput("accessRequest.email" " ")

                  <button  type="submit" value="send">Send</button>

             </fieldset>
         </form>

感谢您提供任何帮助或建议!

1 个答案:

答案 0 :(得分:5)

我认为你走在正确的轨道上。我不知道如何在一个聚合列表中获取所有对象错误消息和字段错误消息,但是您可以这样做:

#springBind("bindName")
#if($status.errors.hasErrors())
    ## Global error messages
    #foreach($e in $status.errorMessages)
        <p>${e}</p>
    #end
    ## Field error messages
    #foreach($f in $status.errors.fieldErrors)
        #springBind("bindName.${f.field}")
        #foreach($e in $status.errorMessages)
            <p>${e}</p>
        #end
    #end
#end

不太干净,但它确实有效。