struts(三)输入校验深度剖析
1.错误消息
(1)this.addActionError(String errorMessage)
jsp页面:<s:actionerror cssStyle=""/> 标签
(2)this.addFieldError(String fieldName,String errorMessage) 字段
jsp页面:<s:fielderror fieldName=""/> 标签
2.可以用标签库来定义,自动生成表格,自动带filed类型的校验。里面设置theme=simple ,就可以回到一般的表单设置了。
3.执行流程:
1) 首先进行类型转换
2) 然后进行输入检验(执行validate的方法)
3) 如果上述过程中出现了任何错误,都不会执行execute方法,页面 会转向struts.xml中action的名为input的result所对应的页面。
4.ActionSupport类的addActionError()方法实现:首先创建一个ArrayList对象,再将错误信息添加到arraylist对象中。
5.当调用getActionError()返回action级别的错误信息列表时返回的实际上是集合的一个副本而不是集合本身,因此对集合副本调用clear()方法清除的依旧是副本中的元素而非原集合中的元素,此时原集合中的内容没有收到任何的影响。换句话说,action级别的错误列表对开发者来说是只读的。
6.FieldError级别的错误信息底层使用linkedHashMap实现的,该Map的key是String类型,value是List<String>类型,这就表示一个field name可以对应多条错误信息,这些错误信息都放置在list<String>集合当中。
7.this.clearActionError();清除error
this.clearFieldError();清除error
this.clearError();清除所有的error
8.Struts2提供了客户端校验与服务端校验。这里只是做个简易的总结。
1.)服务端校验:
当程序流程进入到Action类,并经历了struts2的类型转换阶段后。接着进入struts2的输入校验阶段。
struts2的输入校验可自己编码进行校验,也可通过有规则命名的配置文件进行校验。
1.1)编码校验:
在Action类里重写父类的validate()方法即可。
public void validate(){ if(null == username || "".equals(username)){ this.addFieldError("username","username should not be empty !"); }else if(username.length() < 6 || username.length() > 12){ this.addFieldError("username","username should be between 6 and 12 !"); } if(null == password || "".equals(password )){ this.addFieldError("password ","password should not be empty !"); }else if(password .length() < 6 || password .length() > 12){ this.addFieldError("password ","password should be between 6 and 12 !"); } }
补充:http://www.cnblogs.com/mr-z/articles/2334627.html