Аннотация @ModelAttribute() все еще работает с неправильным параметром в spring mvc

Я пытаюсь изучить Spring MVC. Мне трудно понять, как работает @ModelAttribute. Ниже мой контроллер

@RequestMapping("/showForm")
public String showForm(Model theModel){

    Student student = new Student();
    theModel.addAttribute("testName",student); 
    return "student-form";
}

@RequestMapping("/processForm")
public String showForm(@ModelAttribute("hello") Student student){

    return "student-confirmation";
}

Когда я перехожу на страницу студенческой формы, я создаю объект student и добавляю его в модель с именем атрибута "testName". Затем я отправляю форму в метод «processForm». Используя форму ниже

<form:form action="processForm" modelAttribute="testName">
    First Name: <form:input path="firstName" />
    Second Name: <form:input path="lastName" />

    <input type="submit" value="submit" />
</form:form>

Вот чего я не понимаю, имена атрибутов не совпадают в том месте, где я помещаю объект в модель и где я его извлекаю. Но результат показывает правильно..

theModel.addAttribute("testName",student);   //Here it is testName
@ModelAttribute("hello")  Student student    //Here it is hello

студент-confirmation.jsp

First Name :  ${hello.firstName}
Last Name :  ${hello.lastName}

person rematnarab    schedule 28.11.2017    source источник


Ответы (1)


Модель Student заполняется автоматически после отправки формы, поскольку вы установили testName в качестве атрибута модели:

theModel.addAttribute("testName",student); 

JSP:

<form:form action="processForm" modelAttribute="testName">
<form:input path="firstName" />

Итак, Spring сопоставляет поле Student firstName с вводом текста формы с путем: path="firstName" .

После отправки:

@RequestMapping("/processForm")
public String showForm(@ModelAttribute("hello") Student student){

@ModelAttribute("hello") не требуется, Student сопоставляется автоматически.

Вы просто меняете ссылочное имя модели. Затем вы можете получить значения из модели, используя ${hello.firstName} в своем JSP.

Дополнительную информацию о @ModelAttribute вы можете прочитать @ModelAttribute Annotation As a Method Argument< /а>

Надеюсь, поможет.

person katiforis    schedule 28.11.2017