成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate ClassValidator實例

開發 后端
這里介紹Hibernate ClassValidator實例,這個類進行實例化的代價可能會很高,因此最好只對希望進行驗證的每個類來進行實例化。

Hibernate有很多值得學習的地方,這里我們主要介紹Hibernate ClassValidator實例,包括介紹Spring MVC 控制器使用的 CreditCardValidator等方面。

創建一個Hibernate ClassValidator實例

這個類進行實例化的代價可能會很高,因此最好只對希望進行驗證的每個類來進行實例化。一種方法是創建一個實用工具類,對每個模型對象存儲一個Hibernate ClassValidator實例,如下所示:

處理驗證的實用工具類

  1. /**  
  2. * Handles validations based on the Hibernate Annotations Validator framework.  
  3. * @author Ted Bergeron  
  4. * @version $Id: AnnotationValidator.java,v 1.5 2006/01/20 17:34:09 ted Exp $  
  5. */  
  6. public class AnnotationValidator {  
  7. private static Log log = LogFactory.getLog(AnnotationValidator.class);  
  8.  
  9. // It is considered a good practice to execute these lines once and   
  10. // cache the validator instances.  
  11. public static final ClassValidator<Customer> CUSTOMER_VALIDATOR =  
  12. new ClassValidator<Customer>(Customer.class);  
  13. public static final ClassValidator<CreditCard> CREDIT_CARD_VALIDATOR =  
  14. new ClassValidator<CreditCard>(CreditCard.class);  
  15.  
  16. private static ClassValidator<? extends BaseObject> getValidator(Class<?   
  17. extends BaseObject> clazz) {  
  18. if (Customer.class.equals(clazz)) {  
  19. return CUSTOMER_VALIDATOR;  
  20. }  
  21. else if (CreditCard.class.equals(clazz)) {  
  22. return CREDIT_CARD_VALIDATOR;  
  23. }  
  24. else {  
  25. throw new IllegalArgumentException("Unsupported class was passed.");  
  26. }  
  27. }  
  28.  
  29. public static InvalidValue[] getInvalidValues(BaseObject modelObject) {  
  30. String nullnullProperty = null;  
  31. return getInvalidValues(modelObject, nullProperty);  
  32. }  
  33.  
  34. public static InvalidValue[] getInvalidValues(BaseObject modelObject,  
  35. String property) {  
  36. Class<? extends BaseObject>clazz = modelObject.getClass();  
  37. ClassValidator validator = getValidator(clazz);  
  38.  
  39. InvalidValue[] validationMessages;  
  40.  
  41. if (property == null) {  
  42. validationMessages = validator.getInvalidValues(modelObject);  
  43. }  
  44. else {  
  45. // only get invalid values for specified property.  
  46. // For example, "city" applies to getCity() method.  
  47. validationMessages = validator.getInvalidValues(modelObject, property);  
  48. }  
  49. return validationMessages;  
  50. }  

創建了兩個Hibernate ClassValidator,一個用于 Customer,另外一個用于 CreditCard。這兩個希望進行驗證的類可以調用 getInvalidValues(BaseObject modelObject),會返回 InvalidValue[]。這則會返回一個包含模型對象實例錯誤的數組。另外,這個方法也可以通過提供一個特定的屬性名來調用,這樣做會只返回與該域有關的錯誤。

在使用 Spring MVC 和 Hibernate Validator 時,為信用卡創建一個驗證過程變得非常簡單,如下所示:

Spring MVC 控制器使用的 CreditCardValidator

  1. /**  
  2. * Performs validation of a CreditCard in Spring MVC.  
  3. *  
  4. * @author Ted Bergeron  
  5. * @version $Id: CreditCardValidator.java,v 1.2 2006/02/10 21:53:50 ted Exp $  
  6. */  
  7. public class CreditCardValidator implements Validator {  
  8.  
  9. private CreditCardService creditCardService;  
  10.  
  11. public void setCreditCardService(CreditCardService service) {  
  12. this.creditCardService = service;  
  13. }  
  14.  
  15. public boolean supports(Class clazz) {  
  16. return CreditCard.class.isAssignableFrom(clazz);  
  17. }  
  18.  
  19. public void validate(Object object, Errors errors) {  
  20. CreditCard creditCard = (CreditCard) object;  
  21.  
  22. InvalidValue[] invalids = AnnotationValidator.getInvalidValues(creditCard);  
  23.  
  24. // Perform "expensive" validation only if no simple errors found above.  
  25. if (invalids == null || invalids.length == 0) {   
  26. boolean validCard = creditCardService.validateCreditCard(creditCard);  
  27. if (!validCard) {  
  28. errors.reject("error.creditcard.invalid");  
  29. }  
  30. }  
  31. else {  
  32. for (InvalidValue invalidValue : invalids) {  
  33. errors.rejectValue(invalidValue.getPropertyPath(),   
  34. null, invalidValue.getMessage());  
  35. }  
  36. }  
  37. }  

validate() 方法只需要將 creditCard 實例傳遞給這個驗證過程,從而返回 InvalidValue 數組。如果發現了一個或多個這種簡單錯誤,那么就可以將 Hibernate 的 InvalidValue 數組轉換成 Spring 的 Errors 對象。如果用戶已經創建了這個信用卡并且沒有出現任何簡單錯誤,就可以將更加徹底的驗證委托給服務層進行。這一層可以與商業服務提供者一起對信用卡進行驗證。

現在我們已經看到這個簡單的模型層注釋是如何平衡到控制器、DAO 和 DBMS 層的驗證的。在 Hibernate Doclet 和 Commons Validator 中發現的驗證邏輯的重合現在都已經統一到模型中了。盡管這是一個非常受歡迎的改進,但是視圖層傳統上來說一直是最需要進行詳細驗證的地方。

【編輯推薦】

  1. 剖析Hibernate Extensions
  2. 介紹Hibernate Iterator方法
  3. Hibernate Session緩存經驗總結
  4. 簡單介紹Hibernate配置Proxool
  5. 淺談Hibernate outer-join參數
責任編輯:佚名 來源: 51cto技術博客
相關推薦

2009-09-23 17:05:52

Hibernate S

2009-09-22 08:39:59

Hibernate F

2009-09-23 17:18:16

Hibernate S

2009-09-24 10:06:42

Hibernate實例

2009-09-23 10:28:49

使用Hibernate

2009-09-23 15:12:41

Hibernate視圖

2009-09-22 10:09:21

Hibernate S

2009-06-17 16:22:45

Hibernate連接

2009-06-30 16:55:19

2009-09-23 15:37:52

Hibernate 原

2012-02-14 15:51:13

JavaHibernate

2009-06-30 14:02:00

hibernate入門MyEclipse開發

2009-09-22 09:55:58

Hibernate實例

2010-02-23 09:33:39

Hibernate批量Hibernate批量

2009-09-25 16:57:49

Hibernate查詢

2010-04-19 08:51:30

2009-09-25 11:06:38

Hibernate實例

2009-06-03 16:18:16

Hibernate關系代碼實例

2010-04-15 09:09:02

Hibernate

2012-02-08 14:24:35

HibernateJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 四虎最新| 日韩欧美在线视频 | 91欧美激情一区二区三区成人 | 91婷婷韩国欧美一区二区 | 国产精品国产精品国产专区不片 | 久久九精品 | 亚洲欧美日韩精品久久亚洲区 | 亚洲成人免费在线观看 | 国产精品一区二区久久久久 | 国户精品久久久久久久久久久不卡 | 自拍偷拍中文字幕 | 久久精品日产第一区二区三区 | 91精品国产色综合久久 | 国产一二区视频 | 国产免费福利小视频 | 免费视频二区 | 91免费看片神器 | 91久久精品一区 | 日韩在线国产精品 | 国产在线对白 | 亚洲中国字幕 | av网站免费在线观看 | 精品96久久久久久中文字幕无 | 久久久久网站 | 久久精品成人一区 | 一区二区三区高清 | 91国产精品| 欧美xxxx色视频在线观看免费 | 婷婷五月色综合香五月 | 欧美日韩视频在线 | 国产精品久久久久久 | 国产露脸国语对白在线 | 91黄在线观看 | 欧美女优在线观看 | 亚洲一级淫片 | 国产精品永久免费视频 | 国产熟熟| 久久精品亚洲精品 | 国产福利久久 | 国产精品嫩草影院精东 | 日本免费视频 |