Понимание концепции привязки данных в приложении Spring-MVC - PullRequest
4 голосов
/ 05 ноября 2010

Я пытаюсь понять концепцию привязки данных в Spring-MVC с Velocity (я изучаю эту среду и портирую приложение на эту платформу).

Я привык получать переменные формы с помощью request.getParameter("username"), в мире Spring кажется, что я могу выполнить проверку и тому подобное с " объектами формы ", например, объект стиля модели данных, представляющий все поля формы.

Концепция валидатора имеет смысл, но маршалинг данных из строки запроса в эти объекты для меня все еще неясен. Это концепция «привязки данных» верна?

Если я прав в этом вопросе, несколько конкретных вопросов:

  • Когда между переменной формы (например, "username") и полем объекта (например, org.a.b.MyNewUserFormObj.username) устанавливается "связывание", это означает, что "связывание" является постоянным определением, таким образом, что все последующие сообщения http эта форма вызывает присвоение переменной формы username org.a.b.MyNewUserFormObj.username?
  • Как в мире я могу выполнить вышеуказанное обязательное определение? (если то, что я сказал до сих пор, правильно, я чувствую себя Костелло в «Кто на первом», я даже не знаю, что я только что сказал!), мне просто нужна концептуальная картина.

Спасибо за то, что устранили мозг, сбившийся с пути.

1 Ответ

5 голосов
/ 05 ноября 2010

В привязке данных нет магии.

На самом деле Spring просто заполняет свойства объекта @ModelAttribute значениями параметров запроса с соответствующими именами (в простейшем случае параметр запроса имеет то же имя, что исвойство, но вложенные свойства также поддерживаются).

Итак, если у вас есть

<input type = "text" name = "firstName" />

и

public class Person {
    private String firstName;
    ... getters, setters ...
}

, вы получитезначение из поля формы.

Spring также предоставляет удобный метод для создания форм HTML.Таким образом, вместо создания полей формы вручную, вы можете написать в JSP:

<form:form modelAttribute = "person" ...>
    <form:input path = "firstName" />
</form:form>

или в Velocity (обратите внимание, что в этом случае <form> создается вручную, а путь свойства начинается с имени атрибута модели):

<form ...>
    #springFormInput("person.firstName" "")
</form>

Поля сгенерированных таким образом форм будут предварительно заполнены значениями соответствующих свойств атрибута модели (поэтому необходимо имя атрибута модели).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...