2015-07-26 2 views
2

Я изучаю весну в течение недели или около того, но чувствую, что у меня что-то не хватает в отношении обработки формы.Обработка формы весны MVC и весенние метки

Например, если у меня есть форма, которая позволяет вводить из Student данных, и у меня есть Student фасоли, определенной следующим образом:

public class Student { 
    private Integer age; 
    private String name; 
    private Integer id; 

    // and other getters and setters 
} 

Тогда я иметь вид:

<form:input path="name" /> 
<form:input path="age" /> 
<form:input path="id" /> 

и a Контрольный метод, который обрабатывает этот запрос:

@RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String add(@ModelAttribute Student student) { 

     //do stuff 
    } 

Что делать, если я хочу создать пользовательскую форму, которая не добавляет непосредственно «Student», которая содержит все поля для каждого атрибута, который имеет Student, но вместо этого пользовательская форма с некоторыми свернутыми полями, которая не похожа на Student, мы определили в модели , Например:

<form:input path="age" /> 
<form:input path="firstname" /> 
<form:input path="lastname" /> 

Обратите внимание, что firstname и lastname свойства и не существуют в определении Student класса. Я мог бы объединить эти два значения и поместить их в name.

Для этого случая мне нужно создать новый класс bean для определения атрибутов этой формы? Мне это кажется излишним.

И составляет this, ViewModel вещь, решение?

ответ

1

Создать «объект формы-подложки» , т.е. класс, специфичный для вашей формы. Скопируйте значения из этого FBO в класс сущности.

Это не избыточно, если ваша форма не совпадает с вашей сущностью db.

Если есть много полей, используйте этот инструмент, например Dozer, чтобы его автоматизировать.

Хранение возраста и полного имени в базе данных - плохая идея. Хранение даты рождения и имени/фамилии лучше.

+0

ах! это только то, что мне нужно, ** создать объект поддержки **. Я не мог найти это в Интернете, потому что не был уверен, что искать. – 40Plot

1

В этом случае вы можете сформировать объект JSON только с обязательными полями и отправить его в качестве тела запроса в контроллер.

В клиент на бок-нажатием кнопки сохранения, кадр и отправить JSON как запрос после

На стороне сервера пользование-

@RequestMapping(value = "/add", method = RequestMethod.POST) public String add(@RequestBody Student student) { }

+0

- это, как правило, все делается в мире Java? Это, вероятно, будет работать, но, похоже, «не так чисто», ИМХО. – 40Plot

1

Вы можете попросить Spring автоматически привязать параметры запроса к полям атрибута модели, или вы можете делать все вручную. Классическим способом было бы иметь компонент формы, который имеет те же поля, что и HTML-форма, и пусть Spring заполняет его, а затем вы строите свой объект из этого бина формы.Если у вас нет веских оснований для этого, мой совет заключается в том, чтобы пометить этот метод, который тщательно отделяет часть вида (форму + форму) от части модели (ваша модель)

Но у вас также есть другие возможности:

  • непосредственно получить параметры запроса с @RequestParameter("firstname") и т.д. аннотированными параметрами и вручную использовать их в модели объекте: вы делаете вручную, что весна дает вам бесплатно, но получить полный контроль над
  • использовать связующие пользовательские данные. Он может работать, но победит почти все в привязке и проверке данных Spring MVC, поэтому я настоятельно рекомендую вам не идти этим путем.
Смежные вопросы