Возврат модели Spring в аннотированном методе @ModelAttribute

Могу ли я использовать модель Spring в качестве модели в методе, аннотированном атрибутом @ModelAttribute? Я получаю сообщение об ошибке, что не может найти атрибут в модели.

Вот метод, в котором я добавляю свой объект в модель:

@ModelAttribute("survivor")
public Model getSurvivors(Model m) {
    m.addAttribute("decedent", new Decedent());

    return m;
}

Вот метод рендеринга. Он печатает «модель содержит decedent=true»

@RenderMapping(params="render=survivors")
public String showSurvivors(Model model, RenderRequest request, RenderResponse response) throws Exception {
    logger.info("in showSurvivors");
    logger.debug("model contains decedent={}, mode.containsAttribute("decedent");
    return "survivors";
}

Вот JSP:

<form:form commandName="survivor" action="${submitAction}">
<form:input path="decedent.firstName" />

Ошибка:

org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag Недопустимое свойство «наследник» класса компонента [org.springframework.validation.support.BindingAwareModelMap]: свойство компонента «наследник» не читается или имеет недопустимый метод получения: возвращает ли тип геттера соответствует типу параметра установщика?


person bretter    schedule 14.12.2012    source источник


Ответы (1)


Вы, по сути, делаете это:

model.addAttribute("survivor", model);

Проблема, которую вы видите в form:input, заключается в том, что ожидается геттер decedent для несуществующей модели. Исправление может заключаться в использовании другого типа оболочки поверх обычной карты:

public class MyCommand{
    private Map<String, Decedent> decedents;
...getters and setters.
}

..

model.addAttribute("survivor", ..); //Add MyCommand type..

..

<form:form commandName="survivor" action="${submitAction}">
<form:input path="decedents['decedent']" />
person Biju Kunjummen    schedule 15.12.2012
comment
Отлично, первая строка выше говорит сама за себя. - person bretter; 15.12.2012