2015-10-06 34 views
1

首先,我對此很新,很抱歉,如果這個問題是愚蠢的。我有兩個控制器,具有一流的請求映射和表單驗證:Hibernate @Valid 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"; 
    } 

上userprofile.jsp

<form:form cssClass="form-horizontal" modelAttribute="newCard" action="creditcard/addnewcard"> 
........ 
</form:form> 

另一個

@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"; 
    } 
} 

形式,並且這一切工作,而不@Valid。當我添加@Valid它工作正常,當驗證失敗(顯示錯誤視圖與消息),但是當它成功時,我得到404錯誤,由於不正確的URI - http://localhost:8080/PaymentSystem/creditcard/creditcard/addnewcard。這裏有一個/creditcard是額外的,@Valid以某種方式將此添加到我的URI。我發現途徑我解決這個問題: 1)我感動addNew卡法「的AccountController」

2)我只是刪除@RequestMapping("/creditcard")

但我仍沒有發現這樣的行爲的任何解釋。任何想法?

回答

0

我找到了第三種方法來解決這個問題,最適合這種情況。我只是說${pageContext.request.contextPath}到我的行動PARAM這樣的:

<form:form cssClass="form-horizontal" modelAttribute="newCard" action="${pageContext.request.contextPath}/creditcard/addnewcard"> 
........ 
</form:form> 

但仍須不知道那種@Valid行爲的原因。