Spring MVC привязка к неправильным полям - PullRequest
1 голос
/ 07 сентября 2011

У меня есть контроллер с 2 методами, которые возвращают связанные объекты с помощью аннотации @ModelAttribute:

@ModelAttribute("site")
public Site getSite(){
.....
return site;
}

@ModelAttribute("document")
public Document getDocument(){
.....
return document;
}

Эти объекты связаны друг с другом, когда один сайт имеет много документов.Эти отношения отображаются в JPA.Оба этих объекта содержат поле с одинаковым именем, называемое «urlAlias».Это поле редактируется на странице с использованием следующей разметки свободного маркера:

<@spring.bind "document" />
....
<@spring.formInput "document.urlAlias" />

Когда я отправляю форму контроллеру, я извлекаю объект документа, используя следующий синтаксис:

@RequestMapping(method = RequestMethod.POST)
    public ModelAndView create(@ModelAttribute("document") @Valid Document document, BindingResult documentResult,
            @ModelAttribute("site") Site site, Model model){
...Do Stuff...
}

Похоже, что любое значение, которое я ввожу в поле urlAlias ​​документа, также было установлено в объекте Site, даже если я только отредактировал значение поля в объекте Document.

Я недоумеваю по поводу того, чтоздесь происходитЯ делаю что-то нехорошее, отображая более одного ModelAttribute в одном контроллере?Существуют ли другие вероятные причины такого поведения?

1 Ответ

1 голос
/ 09 сентября 2011

Может показаться, что проблема заключается в параметре сайта в методе create () моего контроллера:

@ModelAttribute("site") Site site

Удаление, которое останавливает привязку Spring к полям в этом объекте.Для будущих гуглов я получаю объект Site в методе create (), используя приведенный ниже код:

if (!model.containsAttribute("site")) {
    throw new IllegalArgumentException("Model must contain site attribute.");
}
Site site = (Site) model.asMap().get("site"); 

Из этого может показаться, что в контроллере можно объявить более одного ModelAttribute., но только один можно использовать одновременно как параметр в методе.

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