關于el-form表單驗證中的validator與validate使用時的問題
el-form表單驗證中的validator與validate使用問題
當在使ElementUI el-form組件用自定義表單驗證規(guī)則的時候,必須保證自定義校驗規(guī)則的每一層都調(diào)用了callback方法,否則會導致el-form組件的validate方法無法進入回調(diào)函數(shù)。
//這樣寫才能進入validate回調(diào) certfNo: [ { required: true, message: "證件號碼不能為空", trigger: "blur" }, { trigger: "blur", validator: function(rule, value, callback) { if (!validIdCard(value)) { return callback(new Error("請輸入正確的證件號碼")); } //外面一層也要調(diào)用回調(diào) return callback(); } } ] //如果是這樣寫的話是無法validate回調(diào)的 certfNo: [ { required: true, message: "證件號碼不能為空", trigger: "blur" }, { trigger: "blur", validator: function(rule, value, callback) { if (!validIdCard(value)) { callback(new Error("請輸入正確的證件號碼")); } } } ]
記Validator.validate造成的重大問題
問題場景
類A繼承類B,類A,B有相同的字段,并且都用了@NotBlank注解。
在參數(shù)都設置正確的情況下,使用Validator.validate校驗類A參數(shù)是否符合規(guī)則時,報錯參數(shù)不符合規(guī)則
代碼如下
//實體類 @Data public class A extends B { ? ? @NotBlank ? ? private String name; ? ? private String score; ? ? @Valid ? ? private C c; } @Data public class B { ? ? @NotBlank ? ? private String name; ? ? private String score; } @Data public class C { ? ? @NotBlank ? ? private String age; ? ? private String sex; } //設置值 public .... pottBean(){ ? ? ?A a=new A(); ? ? ?a.setName("小明"); ? ? check(a); } //校驗方法 public .....check(Object obj){ ? ? Validator validator = ?Validation.buildDefaultValidatorFactory().getValidator(); Set<ConstraintViolation<Object>> constraintViolations = validator.validate(obj); ? //這個地方校驗出來的,就是不符合規(guī)則的參數(shù)名,發(fā)現(xiàn)name也在其中,我也設置了值 ,百思不解 }
后來查找多方資料得知,Validator的驗證組概念。
Bean Validation 規(guī)范中一個重要的概念,就是組和組序列。組定義了約束的子集。
對于一個給定的 Object Graph 結構,有了組的概念,則無需對該 ObjectGraph 中所有的約束進行驗證,只需要對該組定義的一個子集進行驗證即可。
完成組別驗證需要在約束聲明時進行組別的聲明,否則使用默認的組 Default.class。組也有繼承的屬性。
對某一組別進行約束驗證的時候,也會對其所繼承的基類進行驗證。所以當我校驗A參數(shù)時候,會對基類B進行校驗
苦逼的我又一次栽在這個地方了,當需要校驗實體類中的包含的對象時候,需要在該對象上添加@Valid注解 , 長點心吧~
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue中解決異步交互數(shù)據(jù)出現(xiàn)延遲問題
這篇文章主要介紹了vue中解決異步交互數(shù)據(jù)出現(xiàn)延遲問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04vue watch深度監(jiān)聽對象實現(xiàn)數(shù)據(jù)聯(lián)動效果
這篇文章主要介紹了vue watch深度監(jiān)聽對象實現(xiàn)數(shù)據(jù)聯(lián)動的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08