日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HibernateClassValidator實(shí)例

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、衡南網(wǎng)站維護(hù)、網(wǎng)站推廣。

創(chuàng)建一個(gè)Hibernate ClassValidator實(shí)例

這個(gè)類進(jìn)行實(shí)例化的代價(jià)可能會(huì)很高,因此最好只對(duì)希望進(jìn)行驗(yàn)證的每個(gè)類來(lái)進(jìn)行實(shí)例化。一種方法是創(chuàng)建一個(gè)實(shí)用工具類,對(duì)每個(gè)模型對(duì)象存儲(chǔ)一個(gè)Hibernate ClassValidator實(shí)例,如下所示:

處理驗(yàn)證的實(shí)用工具類

 
 
 
  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. // It is considered a good practice to execute these lines once and 
  9. // cache the validator instances.
  10. public static final ClassValidator CUSTOMER_VALIDATOR =
  11. new ClassValidator(Customer.class);
  12. public static final ClassValidator CREDIT_CARD_VALIDATOR =
  13. new ClassValidator(CreditCard.class);
  14. private static ClassValidator extends BaseObject> getValidator(Class 
  15. extends BaseObject> clazz) {
  16. if (Customer.class.equals(clazz)) {
  17. return CUSTOMER_VALIDATOR;
  18. }
  19. else if (CreditCard.class.equals(clazz)) {
  20. return CREDIT_CARD_VALIDATOR;
  21. }
  22. else {
  23. throw new IllegalArgumentException("Unsupported class was passed.");
  24. }
  25. }
  26. public static InvalidValue[] getInvalidValues(BaseObject modelObject) {
  27. String nullnullProperty = null;
  28. return getInvalidValues(modelObject, nullProperty);
  29. }
  30. public static InvalidValue[] getInvalidValues(BaseObject modelObject,
  31. String property) {
  32. Class extends BaseObject>clazz = modelObject.getClass();
  33. ClassValidator validator = getValidator(clazz);
  34. InvalidValue[] validationMessages;
  35. if (property == null) {
  36. validationMessages = validator.getInvalidValues(modelObject);
  37. }
  38. else {
  39. // only get invalid values for specified property.
  40. // For example, "city" applies to getCity() method.
  41. validationMessages = validator.getInvalidValues(modelObject, property);
  42. }
  43. return validationMessages;
  44. }
  45. }

創(chuàng)建了兩個(gè)Hibernate ClassValidator,一個(gè)用于 Customer,另外一個(gè)用于 CreditCard。這兩個(gè)希望進(jìn)行驗(yàn)證的類可以調(diào)用 getInvalidValues(BaseObject modelObject),會(huì)返回 InvalidValue[]。這則會(huì)返回一個(gè)包含模型對(duì)象實(shí)例錯(cuò)誤的數(shù)組。另外,這個(gè)方法也可以通過(guò)提供一個(gè)特定的屬性名來(lái)調(diào)用,這樣做會(huì)只返回與該域有關(guān)的錯(cuò)誤。

在使用 Spring MVC 和 Hibernate Validator 時(shí),為信用卡創(chuàng)建一個(gè)驗(yàn)證過(guò)程變得非常簡(jiǎn)單,如下所示:

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. private CreditCardService creditCardService;
  9. public void setCreditCardService(CreditCardService service) {
  10. this.creditCardService = service;
  11. }
  12. public boolean supports(Class clazz) {
  13. return CreditCard.class.isAssignableFrom(clazz);
  14. }
  15. public void validate(Object object, Errors errors) {
  16. CreditCard creditCard = (CreditCard) object;
  17. InvalidValue[] invalids = AnnotationValidator.getInvalidValues(creditCard);
  18. // Perform "expensive" validation only if no simple errors found above.
  19. if (invalids == null || invalids.length == 0) { 
  20. boolean validCard = creditCardService.validateCreditCard(creditCard);
  21. if (!validCard) {
  22. errors.reject("error.creditcard.invalid");
  23. }
  24. }
  25. else {
  26. for (InvalidValue invalidValue : invalids) {
  27. errors.rejectValue(invalidValue.getPropertyPath(), 
  28. null, invalidValue.getMessage());
  29. }
  30. }
  31. }
  32. }

validate() 方法只需要將 creditCard 實(shí)例傳遞給這個(gè)驗(yàn)證過(guò)程,從而返回 InvalidValue 數(shù)組。如果發(fā)現(xiàn)了一個(gè)或多個(gè)這種簡(jiǎn)單錯(cuò)誤,那么就可以將 Hibernate 的 InvalidValue 數(shù)組轉(zhuǎn)換成 Spring 的 Errors 對(duì)象。如果用戶已經(jīng)創(chuàng)建了這個(gè)信用卡并且沒(méi)有出現(xiàn)任何簡(jiǎn)單錯(cuò)誤,就可以將更加徹底的驗(yàn)證委托給服務(wù)層進(jìn)行。這一層可以與商業(yè)服務(wù)提供者一起對(duì)信用卡進(jìn)行驗(yàn)證。

現(xiàn)在我們已經(jīng)看到這個(gè)簡(jiǎn)單的模型層注釋是如何平衡到控制器、DAO 和 DBMS 層的驗(yàn)證的。在 Hibernate Doclet 和 Commons Validator 中發(fā)現(xiàn)的驗(yàn)證邏輯的重合現(xiàn)在都已經(jīng)統(tǒng)一到模型中了。盡管這是一個(gè)非常受歡迎的改進(jìn),但是視圖層傳統(tǒng)上來(lái)說(shuō)一直是最需要進(jìn)行詳細(xì)驗(yàn)證的地方。


當(dāng)前文章:HibernateClassValidator實(shí)例
路徑分享:http://m.5511xx.com/article/cdhehos.html