2012-02-16 2 views
3

На данный момент я пытаюсь узнать правильный рабочий процесс для отправки/проверки формы/обработки ошибок в Spring MVC 3.1. Нет, у меня есть некоторые вопросы.Spring 3.1 MVC - наилучшая практика обработки рабочего процесса обработки форм

  1. Что такое правильный способ сохранения ошибок формы, связанная модель через редирект (есть встроенный в пути - я не нашел)
  2. Я знаю, что я могу использовать Spring тег формы и JSR 303 для подтверждения (включая сообщения i18n) представленных форм. Но каков правильный способ обработки ошибок, возникающих при обработке данных значений? (например, регистрация невозможна - электронная почта уже зарегистрирована) Из Struts или non java Framework я знаю что-то вроде ActionErrors. Каков правильный способ сделать это в Spring MVC?
  3. Каков правильный способ итерации через ошибки формы, доступные через тег формы: errors? Я просто хочу показать список ошибок.

ответ

1

1) В Spring 3.1 вы можете использовать RedirectAttributes. Они были разработаны специально для Post/Redirect/Get screnario. Вы можете увидеть отличный пример: Spring - Redirect after POST (even with validation errors)

2) Я думаю, что валидаторы JSR-303 должны были быть простыми, независимыми друг от друга и независимыми друг от друга. В то время как их можно написать так, чтобы они обращались к другим объектам сохранения и т. Д. - это не лучшая практика. Я лично проверяю наличие дубликатов писем в контроллере. Если письмо уже существует - я добавляю новый FieldError к BindingResult.

4

Из справочной документации:

1.) Используйте FlashMap атрибуты RequestContextUtils.

2.) При использовании MVC пространства имен валидатор JSR-303 настраивается автоматически при условии, реализация JSR-303 доступен на classpath.Any ConstraintViolations будет автоматически выставлен как ошибки в визуализируемых BindingResult по стандартной форме Spring MVC теги.

3.Use путь = "*", чтобы перечислить все ошибки

<form:form> 
     <form:errors path="*" cssClass="errorBox" /> 
     <table> 
      <tr> 
       <td>First Name:</td> 
       <td><form:input path="firstName" /></td> 
       <td><form:errors path="firstName" /></td> 
      </tr> 
      <tr> 
       <td>Last Name:</td> 
       <td><form:input path="lastName" /></td> 
       <td><form:errors path="lastName" /></td> 
      </tr> 
      <tr> 
       <td colspan="3"> 
        <input type="submit" value="Save Changes" /> 
       </td> 
      </tr> 
     </table> 
    </form:form> 
+0

1.) Большое спасибо, что помогает мне. 2.) Это верно для всех проверок JSR 303, но как насчет того, что находится за проверкой модели. Например, неудачный запрос к веб-API. Каков правильный способ отображения этих ошибок в представлении? (без какой-либо собственной модели ошибок, с которой я вернусь к просмотру). 3.) Это правильно, но нет возможности настроить вывод формы: ошибки. Я хотел бы иметь некоторую структуру ul li li li ul для ошибок. –

+0

2) Используйте HandlerExceptionResolver для RequestBodyNotValidException. 3) используйте BindErrorTag (spring: hasBindErrors), которые вызывают ошибки в переменной «errors» и итерации на $ {errors.allErros} –

+0

Большое спасибо. –