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

