Spring-MVC: нужен самый простой пример обработки форм, привязки и проверки - PullRequest
7 голосов
/ 06 ноября 2010

У меня есть форма:

<form action="/processform">
   <input name="firstname" value="john" />
   <input name="lastname" value="doe" />
</form>

У меня есть объект Person:

public class Person {
   private String firstname;
   private String lastname;
   // ... getters & setters ...
}

Я хочу получить эти данные, выполнить их проверку и опубликовать в хранилище данных.

Как мне написать контроллер для этого?Я понимаю, что могу передать параметры как параметры запроса, но я думаю, что «правильный» способ сделать это - каким-то образом связать данные из формы с объектом Person, а затем получить этот объект Person в контроллере и вызвать объект Validateкоторый настроен на получение объекта Person.

После долгих чтений этот шаг смутил меня.Может ли кто-нибудь показать мне, что необходимо для «привязки» данных, «проверки» (например, валидатора) и «обработки» данных (например, контроллера и, в частности, что передается ему в качестве параметров)?

Ответы [ 2 ]

12 голосов
/ 09 ноября 2010

Вот ответ, который я искал, я не понимал, что Spring по умолчанию будет принимать все параметры из отправки формы (например, «имя» и «фамилия») и может создать объект для Вы вызываете методы установки этих параметров.

Контроллер:

@Controller
public class MyFormProcessor {
   @RequestMapping("/formsubmit")
   public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
      // ...handle form...
   }
}

Spring по существу выполняет следующую магию перед вызовом handleForm для этого запроса (очевидно, более расширяемым способом, чем я изображаю для этого простого примера):

Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());

Для проверки вы можете либо создать свой собственный валидатор (о котором я здесь ничего не упомяну), либо, если вы включите Hibernate Validator в classpath, тогда вы можете аннотировать класс Person (пример ниже), и когда вы добавьте аннотацию @Valid, как я изображал в приведенном выше примере, валидатор Hibernate проверит класс на основе этих аннотаций и опубликует любые ошибки в объекте ошибок (объект BindingResult является расширением Springs 'Errors, и для Простые примеры: объект Errors является интересным компонентом).

JSR-303 аннотированный класс Person (для использования с опцией @Valid):

public class Person {
   @NotNull
   @Size(min=3, max=20)
   private String firstname;

   @NotNull
   @Size(min=3, max=20)
   private String lastname;

   // ... getters & setters ...
}
2 голосов
/ 06 ноября 2010

Spring имеет полный учебник, показывающий каждый аспект, который вам нужен. Это называется "Petclinic". Вы можете проверить это из:

мерзавец https://github.com/SpringSource/spring-petclinic

...