1. 程式人生 > >軟體開發實訓(720科技)――第六課:轉換器和格式化、驗證器

軟體開發實訓(720科技)――第六課:轉換器和格式化、驗證器

4. JS SR R 3 30 03 3 V Va al li id da at to or r 範 例
     jsr303-validator 應用程式展示了 JSR 303 輸入驗證的例子。這個應用程式是對 spring-
validator 進行修改之後的版本,與之前的版本有一些區別。首先,它沒有 ProductValidator 類。
其次,來自 Hibernate Validator 庫的 jar 檔案已經被新增到了 WEB-INF/lib 中。
清單 7.6 Product 類的 name 和 productionDate 欄位已經用 JSR 303 註解型別進行了註解。
   清單 7.6 Product 類
package domain;
import java.io.Serializable;
import java.math.BigDecimal
import java.time.LocalDate;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
public class Product implements Serializable {
private static final long serialVersionUID = 78L;
@Size(min=1, max=10)
private String name;
private String description;
private BigDecimal price;
@Past
private LocalDate productionDate;
// getters and setters not shown
}
在 ProductController 類的 saveProduct 方法中,必須用@Valid 對 Product 引數進行註解,
如清單 7.7 所示。
清單 7.7 ProductController 類
package controller;
import javax.validation.Valid;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import domain.Product;
@Controller
public class ProductController {
private static final Log logger = LogFactory
.getLog(ProductController.class);
@RequestMapping(value = "/add-product")
public String inputProduct(Model model) {
model.addAttribute("product", new Product());
return "ProductForm";
}
@RequestMapping(value = "/save-product")
public String saveProduct(@Valid @ModelAttribute Product product,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
logger.info("Code:" + fieldError.getCode() + ", object:"
+ fieldError.getObjectName() + ", field:"
+ fieldError.getField());
return "ProductForm";
}
// save product here
model.addAttribute("product", product);
return "ProductDetails";
}
}
為了定製來自驗證器的錯誤訊息,要在 messages.properties 檔案中使用兩個鍵