Должен ли Spring 3 @RequestMapping автоматически связывать параметры запроса? - PullRequest
1 голос
/ 10 февраля 2012

Автоматическое связывание параметров запроса похоже на поведение по умолчанию, но я не могу найти много документации по нему.Вот мой пример:

<form:form modelAttribute="test" action="testsubmit.do" method="POST">
  Name: <form:input path="name" />
  Nested Name: <form:input path="test.nestedName"/> 
<input type="submit"/>


public class Test {
    public String name;
    public String name2;
    public TestNested test;
    ...

public class TestNested {
    public String nestedName;
    ...

Теперь с моим отображением:

@RequestMapping(value = "/testsubmit")
public String testSubmit(Test test){
    ...

testОбъект связывает значения формы, включая вложенное значение.Это кажется мне ожидаемым, но меня немного смущает аннотация @ModelAttribute и ее использование по отношению к объектам, указанным в качестве параметров метода сопоставления.

15.3.2.8 Предоставление ссылки на данныеиз модели с @ModelAttribute говорит:

Когда вы помещаете его в параметр метода, @ModelAttribute отображает атрибут модели в конкретный аннотированный параметр метода (см. processSubmit()метод ниже).Вот как контроллер получает ссылку на объект, содержащий данные, введенные в форму.

Когда я связываю объект test с формой при загрузке, я устанавливаю значение name2.

@RequestMapping(value = "/test")
public String test(Model model) {       
    Test test = new Test();
    test.setName2("test name2");
    model.addAttribute("test", test);
    return "test";
}

Это не проходит через метод submit, когда я аннотирую параметр test с помощью @ModelAttribute("test"):

@RequestMapping(value = "/testsubmit")
public String testSubmit(@ModelAttribute("test") Test test) {
    ...

Это ожидается от меняпоскольку name2 не был указан в качестве поля формы / параметра запроса, но это не помогает мне понять смысл использования @ModelAttribute("test").Кто-нибудь может пролить свет на это для меня?

1 Ответ

1 голос
/ 24 марта 2012

@ ModelAttribute позволяет вам указать другое имя / ключ для вашего объекта в модели.Если вы не используете его, Spring автоматически назначит имя на основе класса объекта, например, «test» в случае вашего класса «Test».С @ModelAttribute вы можете изменить имя / ключ вашего объекта в модели, например, на «что угодно», указав «@ModelAttribute (« что угодно »)».

...