校验规则
@Validations(errorMsg="姓名不合法",strLen= {0,10})
private String realName;
参数不传realname,提示errorMsg信息;
参数传realname,不提示errorMsg信息;
能不能做到,传了参数才校验;不传不校验
校验规则
@Validations(errorMsg="姓名不合法",strLen= {0,10})
private String realName;
参数不传realname,提示errorMsg信息;
参数传realname,不提示errorMsg信息;
能不能做到,传了参数才校验;不传不校验
例如EL的方式
@Validations(errorMsg="姓名不合法", el="value == null || (value.length() > 0 && value.length() < 10)")
这样写了好像不合适@Validations(errorMsg="姓名不合法", el="value == null || (value.length() > 0 && value.length() < 10)")
调试了下 el()=false, 但errorMsg 没信息
if (val instanceof Boolean)
return (Boolean)val; --->在这return ,没执行下一步,当前字段errorMsg没信息
errors.add(fieldName, errorMsg);
哦,我知道了, el返回的报错信息...
@Validations(el="(value == null || (value.length() > 0 && value.length() < 10)) ? '姓名不合法' : null")
再修正...
@Validations(el="(value != null && (value.length() > 0 && value.length() < 10)) ? null : '姓名不合法'")
写了个el自定义函数/
但是源码这有问题吧!,还是我没弄清楚
if (val == null)
return true;
if (val instanceof Boolean)
return (Boolean)val;-----到这应该判断ture/false,再是否add errorMsg
errors.add(fieldName, errorMsg);
return false;
```
应该是这样的,你看下合适不:
if (val instanceof Boolean) {
if((Boolean)val == false) {
errors.add(fieldName, errorMsg);
return (Boolean)val;
}
}
return true;
public static boolean el(String fieldName, Object obj, String el, String errorMsg, Errors errors) {
Context context = Lang.context();
context.set("value", obj);
Object val = El.eval(context, el);
if (val == null) {
return true;
}else {
if (val instanceof Boolean) {
if((Boolean)val) {
return true;
}else {
errors.add(fieldName, errorMsg);
return false;
}
}
}
errors.add(fieldName, errorMsg);
return false;
}
貌似还有问题,好像回到最初了:
比如 email字段,非必填字段
insert数据时,email未传值,可以插入空字符
email有值时,就要校验email数据格式;
如果这样写校验规则 @Validations(email = true, errorMsg = "邮箱格式不正确")
email字段校验过不去,必须传正确的值;
除非用el(),custom()自行扩展了,Validations 已有的验证方法用不了了
有么可能拿required这个方法做标示,
required=true 必填做相关校验,required=false 有值才校验,没有不校验默认给空字符
我这边非必填的varchar字段,默认是空字符;
我现在考虑有这样的需求,还是我考虑乱了