编程式验证中的Action级别错误信息、字段级别错误信息详解
2013-05-10 22:16
211 查看
接上一篇问到的下面红色字体部分↓↓↓
@Override
public void validate() {
if (this.user.getUname().length()==0) {
this.addFieldError("uname", "用户名不能为空aaa!");
this.addFieldError("uname", "用户名不能为空bbb!");
}
super.validate();
}
答案是:当用户名为空时,这两个都会显示在jsp页面
分析:
struts2 api中是这样写的:
Action level messages are kept in a Collection.
Field level error messages are kept in a Map from String field name to a List of field error msgs.
译:
Action级别信息保存在一个集合,字段级别的错误信息都保存在一个从字符串字段名称到List字段错误信息的Map中。
其实把Action级别错误信息保存到集合与字段级别错误信息保存到map差不多,具体区别见本页最后。
因此我们就以把field级别错误信息保存到map为例:
把field错误信息保存到Map中步骤:
1.首先它会检查map中有没有以字段名命名的key;
2.如果没有:map.put("",new List());还会把错误信息放到list对象中;
3.已经有了,就通过这个key得到所应对应的集合对象--list对象,map.get("uname"),然后再把错误信息放进去;
注:有多少field,它就会放多少
具体调用到的代码:
//用户验证的Action会调用ActionSupport中的addFieldError(...)方法
public void addFieldError(String fieldName, String errorMessage) {
validationAware.addFieldError(fieldName, errorMessage);
//ActionSupport在此调用ValidationAwareSupport类中的addFieldError(...)方法
}
//ValidationAwareSupport类
public synchronized void addFieldError(String fieldName, String errorMessage) {
final Map> errors = internalGetFieldErrors();
List thisFieldErrors = errors.get(fieldName);
if (thisFieldErrors == null) {
thisFieldErrors = new ArrayList();
errors.put(fieldName, thisFieldErrors);
}
thisFieldErrors.add(errorMessage);
}
private Map<String, List<String>> internalGetFieldErrors() {
if (fieldErrors == null) {
fieldErrors = new LinkedHashMap<String, List<String>>();
}
return fieldErrors;
}
Action级别与字段级别错误信息的区别?
答:区别在于这两个级别错误信息发生时间不同:
<1>字段级别错误信息发生时间:
params拦截器拦下数据之后,马上进行验证,验证的时候数据还有赋值给这个属性。
这时也许有人会问:既然这个时候数据还没有赋值给这个属性,那么它的的值是怎么来的?
答案是:缓存机制把值赋给这个属性。
<2>Action级别错误信息发生时间:
是在执行execute方法之前。
注:非字段验证器在验证失败时会产生一条Action级别错误消息,而不再是字段级别的错误消息。
@Override
public void validate() {
if (this.user.getUname().length()==0) {
this.addFieldError("uname", "用户名不能为空aaa!");
this.addFieldError("uname", "用户名不能为空bbb!");
}
super.validate();
}
答案是:当用户名为空时,这两个都会显示在jsp页面
分析:
struts2 api中是这样写的:
Action level messages are kept in a Collection.
Field level error messages are kept in a Map from String field name to a List of field error msgs.
译:
Action级别信息保存在一个集合,字段级别的错误信息都保存在一个从字符串字段名称到List字段错误信息的Map中。
其实把Action级别错误信息保存到集合与字段级别错误信息保存到map差不多,具体区别见本页最后。
因此我们就以把field级别错误信息保存到map为例:
把field错误信息保存到Map中步骤:
1.首先它会检查map中有没有以字段名命名的key;
2.如果没有:map.put("",new List());还会把错误信息放到list对象中;
3.已经有了,就通过这个key得到所应对应的集合对象--list对象,map.get("uname"),然后再把错误信息放进去;
注:有多少field,它就会放多少
具体调用到的代码:
//用户验证的Action会调用ActionSupport中的addFieldError(...)方法
public void addFieldError(String fieldName, String errorMessage) {
validationAware.addFieldError(fieldName, errorMessage);
//ActionSupport在此调用ValidationAwareSupport类中的addFieldError(...)方法
}
//ValidationAwareSupport类
public synchronized void addFieldError(String fieldName, String errorMessage) {
final Map> errors = internalGetFieldErrors();
List thisFieldErrors = errors.get(fieldName);
if (thisFieldErrors == null) {
thisFieldErrors = new ArrayList();
errors.put(fieldName, thisFieldErrors);
}
thisFieldErrors.add(errorMessage);
}
private Map<String, List<String>> internalGetFieldErrors() {
if (fieldErrors == null) {
fieldErrors = new LinkedHashMap<String, List<String>>();
}
return fieldErrors;
}
Action级别与字段级别错误信息的区别?
答:区别在于这两个级别错误信息发生时间不同:
<1>字段级别错误信息发生时间:
params拦截器拦下数据之后,马上进行验证,验证的时候数据还有赋值给这个属性。
这时也许有人会问:既然这个时候数据还没有赋值给这个属性,那么它的的值是怎么来的?
答案是:缓存机制把值赋给这个属性。
<2>Action级别错误信息发生时间:
是在执行execute方法之前。
注:非字段验证器在验证失败时会产生一条Action级别错误消息,而不再是字段级别的错误消息。
相关文章推荐
- struts2里的类型转换发生了错误,错误信息是放在field级别里,而不是放在action级别里
- Struts2验证错误信息的两个经典方法-addFieldError&addActionError
- Struts2验证错误信息的两个经典方法-addFieldError&addActionError
- Struts2验证错误信息的两个经典方法-addFieldError&addActionError
- 自定义Struts2表单验证后的错误信息返回到网页的显示格式/样式
- 探讨捕获php错误信息方法的详解
- django项目培训站-17-用户登陆-自定义用户验证方式-错误提示信息传前端
- struts2环境配置是出现No result defined for action *** and result input”的错误信息
- Android编程实现捕获程序异常退出时的错误log信息功能详解
- 如何自定义Struts2表单验证后的错误信息显示格式/样式
- modelstate查看错误字段的信息
- springboot->使用messagesSourcec处理字段验证抛出错误
- jquery验证时错误信息的位置
- ASP.Net MVC3/4中Model验证错误信息的本地化
- SpringMVC结合Validation api 和Hibernate validation进行校验不提示验证错误信息
- 如何自定义Struts2表单验证后的错误信息显示格式 .
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- Laravel-validation-验证错误信息中文
- Struts2 表单验证错误信息重复出现的问题
- Action返回错误信息