1、三种实现方式html
① 用validate()方法实现数据校验express
继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Action类中重写validate()方法,若是校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,而后经过OGNL表达式负责输出。apache
实现思路:app
准备注册页面:regist.jsp框架
建立Action类ValidateAction,该类继承自ActionSupport,并重写execute(),由于要实现数据校验,因此需重写validate(),而后进行一系列的断定jsp
public class ValidateAction extends ActionSupport{ private UserInfo info; //确认密码 private String okpwd; @Override public String execute() throws Exception{ return SUCCESS; } //实现数据校验 @Override public void validate() { if(info.getUsername().length()==0){ addFieldError("username", "用户名不能为空"); } if(info.getPassword().length()==0){ addFieldError("pwd", "密码不能为空"); } if(!info.getPassword().equals(okpwd)){ addFieldError("pwd", "两次密码必须一致"); } }
配置Action --struts.xml:ide
<!-- 测试validate方法 --> <action name="Validate" class="cn.happy.action.ValidateAction"> <result name="success">success.jsp</result> <result name="input">regist.jsp</result> </action>
② 用execute()方法实现数据校验测试
继承自ActionSupport类,重写execute()。继承该类是由于它实现了Validateable接口,才能实现数据校验ui
相对于Validate()方法不一样之处就是对hasErrors进行了断定,断定FieldError对象中是否有错误信息,如有错误信息,返回inputthis
同理 配置Action如上所示
public class ExecuteAction extends ActionSupport { private UserInfo info; // 确认密码 private String okpwd; @Override public String execute() throws Exception { if (info.getUsername().length() == 0) { addFieldError("username", "用户名不能为空"); } if (info.getPassword().length() == 0) { addFieldError("pwd", "密码不能为空"); } if (!info.getPassword().equals(okpwd)) { addFieldError("pwd", "两次密码必须一致"); } //断定FieldError对象中是否有错误信息 //如有错误信息 则返回input if(this.hasErrors()){ return INPUT; } return SUCCESS; }
③ 用validateXxx()方法实现数据校验
在validate()方法中对数据验证是能够工做的,若是在字段很是多的状况下,并且每一个字段又有很复杂的验证,那么咱们的validate方法中的代码会愈来愈多。 针对特定的方法输入的数据的验证咱们把他放到validateXxx方法中,Xxx是方法名的首字母大写形式。
通常在字段断定比较多的状况下,能够使用这种方式实现数据校验。提取到自定义的方法中
Struts.xml不一样之处在于,经过method="regist"确认调用哪一个方法
实现效果:
若用户无输入:
若输入符合匹配条件:
2、用struts2的验证框架实现数据校验
① 为何要用验证框架:
当验证规则比较复杂时,Action类的代码将变得很繁琐,假如咱们要对电话号码的格式进行验证,是很是麻烦的
②验证框架的优势:
Struts2中内置了一个验证框架,将经常使用的验证规则进行了编码实现,使用验证框架时,用户无需再进行编码,只要在外部配置文件中指定某个字段须要进行的验证类型,并提供出错误信息便可,从而大大减轻了开发者的负担,提升开发效率
③命名规范:
一、文件的命名规则:
ActionName-validation.xml,ActionName为须要校验的Action类名,如:UserAction-validation.xml
二、文件存放路径:
该文件与Action类的class文件位于同一个路径下
三、文件格式:包括以下3个配置元素
<field>: 为每个须要校验的字段添加一个验证元素<field>,name属性表示要校验的字段名。
<field-validator>: 使用该元素来指定校验规则,type属性为校验规则名
<message>: 使用该元素来指定校验出错时要显示的标签,key属性指向资源文件中的标签名
经常使用验证规则:
实现思路:
准备注册页面:
建立Action类,继承ActionSupport类,并重写execute(),封装实体类属性
配置Action--struts.xml
建立UserAction-validation.xml文件:
该文件头文件的查找位置:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 用户名:不能为空 长度在6-10之间 --> <field name="info.username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">6</param> <message>用户名长度必须在${minLength}和${maxLength}之间</message> </field-validator> </field> <!-- 验证密码--> <field name="info.password"> <field-validator type="requiredstring"> <message>密码不能为空</message> </field-validator> </field> <!-- 确认密码 --> <field name="okpwd"> <field-validator type="fieldexpression"> <param name="expression">info.password==okpwd</param> <message>密码和确认密码必须一致</message> </field-validator> </field> <!-- 验证电话号码 --> <field name="info.phone"> <field-validator type="requiredstring"> <message>电话号码不能为空</message> </field-validator> </field> <field name="info.phone"> <field-validator type="regex"> <param name="regex">^(\d{3,4}-){0,1}(\d{7,8})$</param> <message>电话号码格式不正确</message> </field-validator> </field> </validators>
实现效果:
若都不输入:
若输入匹配上:
实现数据校验的流程:
① 对输入的数据首先进行类型转换,并封装成Action属性
② 若是类型转换出现错误,就将错误提示保存到ActionContext,并封装到fieldError中
③ 类型转换执行完毕后,会根据项目的配置执行验证框架的校验,也可能经过执行validate()或者validateXxx()方法进行校验
④ 若是通过以上步骤都没有出现错误,那么将直接调用Action里用于处理用户请求的方法,而后根据结果类型转入相应的视图资源。一旦出现了错误,那么系统将直接返回输入数据的视图资源,后者一般由workflow拦截器处理
转自:http://www.cnblogs.com/jingpeipei/p/5953666.html