2016-11-28 3 views
0

Методы @ModelAttribute в контроллере@ModelAttribute проверка зависимостей не работает должным образом

@ModelAttribute("command") 
public A getA() { 
... 
} 

@ModelAttribute 
public void prepareData(@ModelAttribute("command") A a) { 
... 
} 

Мы используем Spring 4.2.6 версию и As per Spring forum Эта проблема была решена в 4.1.0 версии весной. Когда я развертываю проект, иногда getA() выполняет перед prepareData, а иногда prepareData() выполняет перед getA(), но согласно jira for above issue, он был исправлен во всех версиях весны, начиная с 4.1.0. Не могли бы вы посоветовать, что я здесь ничего не пропал.

ответ

2

Вы должны отметить только «readyData» с помощью @ModelAttribute не для обоих. Таким образом, маркировка означает, что она будет выполнена, прежде чем будут вызваны какие-либо запросы или метод контроллера.

Так что если «гэта» Ваш метод контроллера, и вы хотите предобработки «A», прежде чем она вызывается (в гэта) ваши методы должны быть что-то вроде этого

public A getA(@ModelAttribute("command") A a) { ... } 

@ModelAttribute("command") 
public A prepareData() { 
    return new A();//or some other way you want to populate values of A 
} 
+0

Спасибо за ответ, пожалуйста, вы можете перейдите по этим ссылкам https://jira.spring.io/browse/SPR-6299, а также вы можете проверить тестовый пример здесь. https://github.com/spring-projects/spring-framework/commit/56a82c1cbe8276408f9fff06cfb1ac9da7961a80 – Irfan

+0

@ModelAttribute ("foo") и @ModelAttribute ("bar") отличаются друг от друга – kuhajeyan

+0

Но getBar принимает параметр как foo, если вы наблюдаете – Irfan

Смежные вопросы