[英]Hibernate @Valid strange behaivor in SpringMVC
首先,我對此很陌生,如果這個問題很愚蠢,對不起。 我有兩個具有類請求映射和表單的控制器來驗證:
@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
卡方法移至“ AccountController”
2)我剛剛刪除了@RequestMapping("/creditcard")
但是我仍然沒有找到任何關於這種行為的解釋。 任何想法?
我找到了解決此問題的第三種方法,最適合這種情況。 我只是將${pageContext.request.contextPath}
添加到我的操作參數中,如下所示:
<form:form cssClass="form-horizontal" modelAttribute="newCard" action="${pageContext.request.contextPath}/creditcard/addnewcard">
........
</form:form>
但它仍然不知道這種@Valid行為的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.