首先,我对此非常陌生,如果这个问题愚蠢,对不起。我有两个带有类请求映射的控制器和用于验证的表单:
@Controller
@RequestMapping("/creditcard")
public class CreditCardController {
@Autowired
//repositories
@RequestMapping(value = "/addnewcard", method = RequestMethod.POST)
public String addNew(
@ModelAttribute("newCard") @Valid CreditCard creditCard,
BindingResult bindingResult, Principal principal, Model model) {
if (bindingResult.hasErrors()) {
//render error view
}
creditCardService.registerNew(creditCard, principal.getName());
return "redirect:/account";
}
另一个
@Controller
@RequestMapping("/account")
public class AccountController {
@Autowired
//repo
@RequestMapping("")
public String showUserProfile(Principal principal, Model model) {
String username = principal.getName();
User user = userService.findByUsername(username);
Account account = user.getAccount();
List<Payment> payers = paymentService
.getAllPaymentsForPayerAccount(account.getId());
model.addAttribute("user", user);
model.addAttribute("account", account);
model.addAttribute("payers", payers);
return "userprofile";
}
}
userprofile.jsp上的表格
<form:form cssClass="form-horizontal" modelAttribute="newCard" action="creditcard/addnewcard">
........
</form:form>
所有这一切都没有@Valid
。当我添加@Valid
时,它可以正常工作,当验证失败时(显示带有消息的错误视图),但是当它成功时,由于URI不正确而导致404
错误 - http://localhost:8080/PaymentSystem/creditcard/creditcard/addnewcard
。这里有一个/creditcard
是额外的,@Valid
以某种方式将此添加到我的URI中。我找到了解决这个问题的方法:
1)我将addNew
卡片方法移至&#39; AccountController&#39;
2)我刚刚删除@RequestMapping("/creditcard")
但我仍然没有找到任何有关此类行为的解释。有什么想法吗?
答案 0 :(得分:0)
我找到了解决这个问题的第三种方法,最适合这种情况。我刚刚将${pageContext.request.contextPath}
添加到我的行动参数中:
<form:form cssClass="form-horizontal" modelAttribute="newCard" action="${pageContext.request.contextPath}/creditcard/addnewcard">
........
</form:form>
但它仍然不知道这种@Valid行为的原因。