我可以在检查Spring中的错误之前在BindingResult中添加值吗?
@InitBinder("memberrequest")
public void initMemberRequestBinder(WebDataBinder binder) {
binder.setValidator(new MemberRequestValidator());
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView saveRequest(@Valid @ModelAttribute("memberrequest") MemberRequest mr, BindingResult result, HttpSession session) {
session.setAttribute("phone", mr.getPhonenumber());
mr.setWelfare((String)session.getAttribute("welfare"));
mr.setSchool((String)session.getAttribute("school"));
mr.setTitle((String)session.getAttribute("title"));
mr.setDistrict((String)session.getAttribute("district"));
mr.setName((String)session.getAttribute("name"));
mr.setFile((String)session.getAttribute("file"));
mr.setQueue((String)session.getAttribute("queue"));
mr.setRequestor(getUser());
mr.setSchool_id((String)session.getAttribute("school_id"));
mr.setBorough_id((String)session.getAttribute("borough_id"));
mr.setRetiree((String)session.getAttribute("retiree"));
if (result.hasErrors()) {
LOGGER.debug("Pages had errors on it... returning to input page");
return new ModelAndView("w-question");
} else {
我在Spring控制器中有上面的代码,但问题是我需要从会话中取出一些值并在Validator运行之前将它们移动到BindingResult(Bean)中。
这可以做某人吗?这些问题是我在会议中保留的一些价值观..请知道这是否可以,以及如何做到最好的方法..
答案 0 :(得分:2)
在您的控制器定义方法中,用于创建模型属性并使用@ModelAttribute批注对其进行注释。 实际上,您不会修改绑定结果对象本身,而是修改验证目标,然后您可以根据需要更改验证器行为以更改绑定结果。
@ModelAttribute("memberrequest")
public MemberRequest getMemberRequest(HttpSession session) {
MemberRequest mr = new MemberRequest();
mr.setWelfare((String)session.getAttribute("welfare"));
mr.setSchool((String)session.getAttribute("school"));
mr.setTitle((String)session.getAttribute("title"));
mr.setDistrict((String)session.getAttribute("district"));
mr.setName((String)session.getAttribute("name"));
mr.setFile((String)session.getAttribute("file"));
mr.setQueue((String)session.getAttribute("queue"));
mr.setRequestor(getUser());
mr.setSchool_id((String)session.getAttribute("school_id"));
mr.setBorough_id((String)session.getAttribute("borough_id"));
mr.setRetiree((String)session.getAttribute("retiree"));
return mr;
}
此方法将在绑定之前调用,但请记住,在使用@ModelAttribute(“memberrequest”)作为参数的每个控制方法之前,将调用此方法。