spring 3 mvc BindingResult result 校验注意点
BindingResult result 的使用,必须在controller层增加@ModelAttribute("fundsPreTransfer") 它和ModelAttribute同时使用,并且参数要紧挨着。这样才不会报。Errors/BindingResult argument declared without preceding model attribute异常。
?
?
注意:
@RequestMapping("/funds/transfer/save")
??? public String save(
??? ??? ??? @ModelAttribute("fundsPreTransfer") FundsPreTransfer fundsPreTransfer,
??? ??? ??? BindingResult result, Model model, HttpServletRequest request) {
??? ??? // 服务器端校验
??? ??? fundsTransferValidator.validate(fundsPreTransfer, result);
??? ??? if (result.hasErrors()) {
??? ??? ??? // 如果存在错误,则跳转到显示页面
??? ??? ??? return "funds/transfer/show";
??? ??? }
??? ??? Double transferAmount = fundsPreTransfer.getTransferAmount();
??? ??? String comments = fundsPreTransfer.getComments();
??? ??? fundsPreTransfer.setTransferIp(request.getRemoteAddr());
??? ??? // query fundsSerialNumber
??? ??? String fundsSerialNumber = RandomStringUtils.random(9, false, true);
??? ??? fundsPreTransfer.setFundsSerialNumber(fundsSerialNumber);// 设置流水号
??? ??? // 保存转账记录。
??? ??? fundsPreTransferService.persist(fundsPreTransfer, getUsername(),
??? ??? ??? ??? transferAmount);
??? ??? // 传递值到下一页面。
??? ??? String fundsAccount = request.getParameter("fundsAccount");// 资金账号
??? ??? model.addAttribute("fundsAccount", fundsAccount);
??? ??? model.addAttribute("counterpartyFundsAccount",
??? ??? ??? ??? request.getParameter("counterpartyFundsAccount"));
??? ??? // 查出username
??? ??? FundsBase fundsBase = fundsBaseService.findByFundsAccount(fundsAccount);
??? ??? BaseAccount baseAccount = fundsBase.getBaseAccount();
??? ??? String username = baseAccount.getUsername();
??? ??? model.addAttribute("username", username);
??? ??? model.addAttribute("transferAmount", transferAmount);
??? ??? model.addAttribute("comments", comments);
??? ??? model.addAttribute("fundsSerialNumber", fundsSerialNumber);
??? ??? return "funds/transfer/show_next";
??? }