3

我真的很欣赏 Spring 3 anoation 驱动的 Web 控制器映射

我有很多带有签名的控制器,例如:

@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)
4

2 回答 2

8

在控制器方法的执行BindingResult被存储为一个名为的模型属性BindingResult.MODEL_KEY_PREFIX + <name of the model attribute>之后,以后的模型属性被合并到请求属性中。因此,在合并之前,您可以使用 Hurda 自己的答案,合并后使用:

request.getAttribute(BindingResult.MODEL_KEY_PREFIX + "solicitation")
于 2010-10-07T22:22:31.680 回答
3

因此,在@Axtavt 的大力帮助下,我得出结论,您可以在 postHandle 方法中从 ModelAndView 获取 Bind reuslt:

void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
  String key = BindingResult.MODEL_KEY_PREFIX + "commandName";
  BindingResult br = (BindingResult) modelAndView.getModel().get(key);
}
于 2010-10-13T14:10:42.083 回答