Перехватчик веб-запросов Spring 3 – как мне получить BindingResult?

Я действительно ценю сопоставление веб-контроллеров, основанное на аноировании Spring 3.

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

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

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

поскольку методы перехватчика имеют одинаковую сигнатуру

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

person Hurda    schedule 07.10.2010    source источник


Ответы (2)


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

request.getAttribute(BindingResult.MODEL_KEY_PREFIX + "solicitation")
person axtavt    schedule 07.10.2010
comment
где в документации я могу найти такую ​​информацию? (Я начал с Spring 3.0) - person Hurda; 08.10.2010
comment
@Hurda: доступ к BindingResult без стандартных средств (таких как тег <form:errors>) является довольно сложной темой, поэтому размещение BindingResult в модели, описанной в его javadoc: static.springsource.org/spring/docs/3.0.x/javadoc-api/org/ - person axtavt; 08.10.2010
comment
Итак, я только что проверил это, и BindResult не в атрибутах запроса, а в модели. Но это нормально, потому что ModelAndView является частью сигнатуры void postHandle (запрос HttpServletRequest, ответ HttpServletResponse, обработчик объектов, ModelAndView modelAndView) - person Hurda; 13.10.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);
}
person Hurda    schedule 13.10.2010