Использование @ModelAttribute для справочных данных - избегайте привязки - PullRequest
0 голосов
/ 22 марта 2011

Я хотел бы использовать магию автоматического подключения @ModelAttribute для получения и передачи справочных данных.Проблема заключается в том, что все, что добавляется в модель с @ModelAttribute, считается объектом поддержки формы, а затем связывается с запросом, потенциально изменяя объекты.

Я просто хочу, чтобы они были добавлены вмодель для ссылки на представление и возможность использования уровня параметра @ModelAttribute для привязки объектов к методам, помеченным @RequestMapping.Есть ли способ сделать это без какого-либо подробного @InitBinder метода?

, например:

@ModelAttribute("owner")
public Person getOwner(@PathVariable("ownerId") Integer ownerId){
  return getOwnerFromDatabaseById(ownerId);
}

@RequestMapping("/{ownerId}/addPet.do")
public ModelAndView addPet(HttpServletRequest request, @ModelAttribute("owner") Person owner){
  String name = ServletRequestUtils.getStringParameter(request, "name");
  Pet pet = new Pet();
  pet.setName(name);
  pet.setOwner(owner);
  saveToDatabase(pet);
}

Тривиальный пример, когда домашнее животное добавляется к владельцу.Я хотел бы, чтобы владелец был помещен в модель для использования представлением, и я также хотел бы использовать автоматическое связывание параметра в addPet().Предположим, что и Pet, и Person имеют члена name.В этом случае owner будет автоматически привязан к запросу, установив для его name имя питомца.Как этого можно избежать?

1 Ответ

0 голосов
/ 23 марта 2011

Я думаю, что вы делаете это неправильно, в этом случае @ModelAttribute должен быть Pet - это то, что должно использоваться в качестве объекта поддержки формы. Чтобы заполнить его владельца автоматически на основе ownerId, вы можете зарегистрировать редактор свойств для класса Owner, который будет иметь логику, которую вы в настоящее время используете в методе getOwner.

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