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

0 forms validation spring velocity spring-mvc

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

我做了很多谷歌搜索,有些人提出了类似的建议

#if ($status && $status.errors.hasErrors())
#foreach( $error in $status.errorMessages )
<p>$error</p>
#end
#end
Run Code Online (Sandbox Code Playgroud)

...但是当放置在将命令对象附加到表单的初始#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>
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助或建议!

小智 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
Run Code Online (Sandbox Code Playgroud)

不太干净,但它的工作原理.