У меня возникли проблемы с пониманием того, как форма представления в Spring 3 MVC работает.
Что я хочу сделать, это создать контроллер, который будет использовать имя пользователя и отобразить его для него. И как-то я это сделал, но я действительно не понимаю, как это работает. Так..
У меня есть форма, которая выглядит так:
<form:form method="post" modelAttribute="person">
<form:label path="firstName">First name</form:label>
<form:input path="firstName" />
<br />
<form:label path="lastName">Last name</form:label>
<form:input path="lastName" />
<br />
<input type="submit" value="Submit" />
</form:form>
У меня также есть контроллер, который выглядит так:
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String showHelloPage(Model model) {
model.addAttribute("person", new Person());
return "home";
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public String sayHello(Person person, Model model) {
model.addAttribute("person", person);
return "home";
}
}
Чтобы отобразить приветственное сообщение пользователю, я использую следующий код на странице JSP:
<c:if test="${not empty person.firstName and not empty person.lastName}">
Hello ${person.firstName} ${person.lastName}!
</c:if>
И он работает (я опускаю файлы конфигурации XML, потому что они не имеют отношения к проблеме).
Я думал, что атрибут "modelAttribute" в форме указывает на переменную bean, которая должна быть заполнена значениями входов (как указано в их атрибутах "путь" ). Но выглядит, работает совсем по-другому. Если я удалю строку
model.addAttribute("person", new Person());
из метода showHelloPage. Я получаю (общее) исключение "Ни BindingResult, ни...".
Кроме того, в начале метод sayTHello выглядел так:
(...)
public String sayHello(@ModelAttribute("person") Person person, Model model) {
(...)
Я имею в виду, что у него была аннотация "ModelAttribute". Я добавил это, потому что в учебниках, которые я прочитал, он всегда присутствовал. Но после того, как я удалил его, все прошло хорошо, как и раньше.
Итак, мой вопрос - в чем заключается использование аннатации "ModelAttribute"? Можно ли опустить атрибут "modelAttribute" в форме? И вторая часть, каков способ (возможно, аннотация) для создания формы, автоматически связывает значения входов с соответствующими свойствами bean (которые будут объявлены как параметр метода)? Без необходимости добавления пустой bean перед отправкой формы (как я должен сделать это сейчас).
Спасибо за ваши ответы (которые не являются ссылками на документацию Spring, потому что я ее уже прочитал).