Показать все ошибки формы Spring в шаблоне Velocity

У меня есть приложение, использующее Spring MVC и Velocity. В одной из моих форм я хочу показать все ошибки, связанные с формой, вверху страницы. Я понял, как показывать ошибки, связанные с одним конкретным полем (с помощью макроса #springShowErrors), но я действительно хочу иметь один большой блок ошибок в верхней части формы, а не перечислять ошибки рядом с каждым отдельным элементом. .

Я немного погуглил, и несколько человек предложили что-то вроде

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

... но это не дает мне вывода, когда он находится сразу под начальным макросом #springBind, который прикрепляет мой командный объект к форме. Помещение #springShowErrors сразу после макроса #springFormInput для каждого поля работает нормально, поэтому я знаю, что мой валидатор работает и генерирует ошибки.

Любые идеи? Я пропустил что-то действительно глупое?

Вот полная форма с моей неработающей попыткой сразу после первого #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>

Спасибо за любую помощь или совет!


person KMitchell    schedule 29.06.2011    source источник


Ответы (1)


Я думаю, ты на правильном пути. Я не знаю прямого способа получить все сообщения об ошибках объекта и сообщения об ошибках поля в одном агрегированном списке, однако вы можете сделать это:

#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

Не так чисто, но работает.

person Rob Beardow    schedule 29.06.2011