Spring 3 перехватчик веб-запросов - как мне получить BindingResult? - PullRequest
3 голосов
/ 08 октября 2010

Я действительно ценю привязку Spring 3 к веб-контроллерам, основанным на аннотациях

У меня много контроллеров с подписями вроде:

@RequestMapping(value = "solicitation/create",method = RequestMethod.POST)
public String handleSubmitForm(Model model, @ModelAttribute("solicitation") Solicitation  solicitation, BindingResult result) 

Но моя проблема в том, что я хочу написать перехватчик, который прошел бы через BindingResults после обработки - как мне получить их из HttpRequest или HttpResponse?

как методы intercpetor с одинаковой подписью

public boolean postHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

Ответы [ 2 ]

8 голосов
/ 08 октября 2010

После выполнения метода контроллера BindingResult сохраняется как атрибут модели с именем BindingResult.MODEL_KEY_PREFIX + <name of the model attribute>, более поздние атрибуты модели объединяются в атрибуты запроса.Таким образом, перед объединением вы можете использовать собственный ответ Хурды, после объединения используйте:

request.getAttribute(BindingResult.MODEL_KEY_PREFIX + "solicitation")
2 голосов
/ 13 октября 2010

Так что с большой помощью @Axtavt я пришел к выводу, что вы можете получить Bind reuslt из ModelAndView в методе postHandle:

void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
  String key = BindingResult.MODEL_KEY_PREFIX + "commandName";
  BindingResult br = (BindingResult) modelAndView.getModel().get(key);
}
...