Привязка данных аннотированных параметров @ModelAttribute - PullRequest
2 голосов
/ 26 мая 2009

У меня есть аннотированный контроллер Spring 2.5, в котором у меня есть метод, аннотированный @RequestMapping (method = RequestMethod.GET), который выполняет некоторую логику для заполнения модели.

У меня также есть метод, аннотированный @RequestMapping (method = RequestMethod.POST), который выполняет запрос. Этот метод имеет аннотированный параметр @ModelAttribute, который содержит мою собственную форму pojo, назовем ее MyForm. У меня также есть метод инициализации для MyForm, также аннотированный @ModelAttrribute. Теперь все работает как положено: по запросу POST данные формы связываются с MyForm, и я могу обработать его.

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

Почему я должен это сделать, возможно ли принудительное связывание данных в моей форме для запроса GET другим способом? Теперь я просто передаю параметр, но поскольку он уже есть в модели, мне не нужно ничего с ним делать, что приводит к ужасному неиспользуемому параметру метода.

[Редактировать: некоторые примеры кода для иллюстрации]

Контроллер, который не заполняет форму при получении запроса:

@Controller
public class MyController {

  @ModelAttribute("myForm")
  public MyForm createForm() {
    return new MyForm();
  }

  @RequestMapping(method=RequestMethod.GET)
  public void handlePage(Model model) {
    //Do some stuff to populate the model....
  }

  @RequestMapping(method=RequestMethod.POST)
  public void processForm(@ModelAttribute("myForm") MyForm myForm) {
    //Process the form
  }
}

Когда я изменяю сигнатуру метода метода handlePage, он заполняется при получении запроса ...

@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
  //Do some stuff to populate the model....
}

1 Ответ

3 голосов
/ 29 мая 2009

Метод с @ModelAttribute может иметь любые аргументы, которые поддерживает @RequestMapping, поэтому, например, вы можете добавить сколько угодно @RequestParam аргументов, необходимых для заполнения объекта вашей команды, или даже сам запрос http. Я не уверен, можете ли вы получить экземпляр связывателя данных таким же образом или нет.

Снова читая документы, я думаю, что идея состоит в том, что предварительное заполнение в методе @ModelAttribute будет базироваться на базе данных, поэтому, вероятно, не происходит привязки данных без добавления @ModelAttribute в качестве аргумента для метод @RequestMapping.

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