Показать все ошибки формы Spring в шаблоне Velocity - PullRequest
0 голосов
/ 29 июня 2011

У меня есть приложение, использующее 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>

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

1 Ответ

5 голосов
/ 30 июня 2011

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

#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

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

...