我目前正在使用 Hibernate 和 Spring MVC 進行一些 HTML 表單驗證。我已經對 Enity 應用了一些驗證并將代碼添加到我的控制器中。將包含格式不正確數據的表單提交給控制器時,將顯示錯誤頁面頁面 (500)。但是,我希望將表單返回給用戶,并在不正確的字段附近顯示錯誤消息。實體代碼: @NotNull(message="Please enter a product") @Column(name="product_name") private String productName; @NotNull(message="Please enter a product code") @Pattern(regexp="([A-Z]{2,4})-([0-9]{5})|", message="Incorrect format") @Column(name="product_code") private String productCode;控制器代碼: @GetMapping("/showFormForAdd")public String showFormForAdd(Model theModel) { // create model attribute to bind form data QaRaised theProduct = new QaRaised(); theModel.addAttribute("product", theProduct); return "product-form";}@PostMapping("/saveProduct")public String saveProduct(@Valid @ModelAttribute("product") QaRaised theProduct, BindingResult bindingResult) { qaRaisedService.saveProduct(theProduct); if (bindingResult.hasErrors()) { return "product-form"; } return "redirect:/products/qaraised";}來自錯誤的堆棧跟蹤: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.sonya.spring.entity.QaRaised] during persist time for groups [javax.validation.groups.Default, ]List of constraint violations:[ConstraintViolationImpl{interpolatedMessage='Incorrect format', propertyPath=productCode, rootBeanClass=class com.sonya.spring.entity.QaRaised, messageTemplate='Incorrect format'}表格代碼: <div class="form-group"><label for="InputPC">Product Code:</label><form:input required="true" type="text" title="Product Code" path="productCode" class="form-control" id="productCodeInput" placeholder="Enter Product Code" commandName="productCode"/><form:errors path="productCode"/>這里的驗證工作正常,我只是想將用戶重定向回表單。誰能看到我遺漏的任何東西或為我指明正確的方向?
1 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
這是一個老問題,但實際上我遇到了與您遇到的完全相同的編碼問題的完全相同的問題,所以萬一其他人遇到這個問題......
@want2learn 是對的 - 在確保數據有效之前,您不應該嘗試保存數據。否則,驗證器將拋出異常。只需將您的保存邏輯向下移動:
@PostMapping("/saveProduct")
public String saveProduct(@Valid @ModelAttribute("product") QaRaised theProduct, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "product-form";
}
qaRaisedService.saveProduct(theProduct);
return "redirect:/products/qaraised";
}
添加回答
舉報
0/150
提交
取消