标签:
(一) 编程式验证
(1) 创建一个类继承ActionSupport
原因: 因为ActionSupport类实现了Validateable接口
查看validateable接口,
发现ActionSupport对该方法做了空实现
(2) 在创建的类中覆写AcitonSupport中的valudate()方法
public class UserAction2 extends ActionSupport implements ModelDriven<User> { private User user; public void validate(){ if(user.getUsername()==null || "".equals(user.getUsername())){ super.addFieldError("username", "账户不能为空"); } if(user.getPassword()==null || "".equals(user.getPassword())){ super.addFieldError("password", "密码不能为空"); } System.out.println("进行了验证"); } public String login(){ System.out.println("方法进行了验证"); return SUCCESS; } public String add(){ System.out.println("你执行了增加操作"); return SUCCESS; } ... }
(3) 在strus.xml配置结果集
Struts在进行数据效验失败以后,会返回"Action.INPUT"字符串。去结果集寻找对应的页面
这样子不管是调用login动作方法还是add动作方法,都会执行验证方法(对Action中的所有方法都进行验证)
方式一:使用@SkipValition注解
也就是说在Action中,我们在不需要验证的操作方法上使用该注解
public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User user; public void validate(){ System.out.println("执行了验证操作"); } @SkipValidation public String login(){ System.out.println("执行了登录操作<*>"); return SUCCESS; } public String add(){ System.out.println("执行了添加操作<*>"); return SUCCESS; }
结果:在依次调用了动作以后,发现在执行login方法以前,不会在执行validate方法。
方式二:在validate方法+需要验证的方法
public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User user; public void validateAdd(){ System.out.println("执行了验证操作"); } public String login(){ System.out.println("执行了登录操作<*>"); return SUCCESS; } public String add(){ System.out.println("执行了添加操作<*>"); return SUCCESS; }
结果:这样子,就只会在调用add动作的时候,执行验证方法
( 二 ) 声明式验证(XML验证)
在Action包中,创建一个名称为:Action类名-validation.xml的文件
(1)创建配置文件
规则:
a.配置文件位置:和需要拦截的Action在一个包中
b.配置文件名字:Action-validation.xml【注意:这里的Action名字是struts.xml中配置的name】
c.配置文件中field标签的name与表单中的name对应,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 指定要验证的字段 --> <field name="username"> <!-- 指定验证规则 --> <field-validator type="required"><!-- required:验证字段是不是null --> <message>必须要输入用户名</message> </field-validator> </field> </validators>
( 2 ) 配置结果集
在struts.xml中配置一个result结果集,name为input的结果集,就是当验证器验证失败以后转向的页面
以上就配置完成了,每当你访问Action的时候,不论调用Action中的什么方法,都会进入验证器验证,验证成功后才会执行Action方法,否则返回一个"input",并转发到相应的页面
炒鸡简单,只需要改变配置文件名字,内容不变。改为:
Action名字+需要拦截器的方法名+"-validation".xml 如:LoginAction-login-validation.xml
Struts2提供的拦截器
( 1 ) 寻找 Struts2 配置这些拦截器的配置文件
jar包:xwork-core-2.3.24.1.jar
包:com.opensymphony.xwork2.validator.validators
找到了default.xml配置文件,
( 2 ) 查看配置文件的书写规则
jar包:xwork-core-2.3.24.1.jar
找到 xwork-validator-1.0.3.dtd 配置文件
配置文件书写规则:
field-validator:param(可选)和message
field元素:多个field-validator元素
根元素:validators(其中有多个field和validator元素)
validator元素:param(可选)和messag元素
message
( 3 ) 写配置文件
在配置文件中使用验证器有两种方式,
方式一:
<validators> <field name="username"> <field-valitor type="regex"> <param> <![CDATA[[a-zA-Z]{6,8}]]> </param> <message> 字符串由6-8字符串组成 </message> </field-valitor> </field> </validators>
方式二:
<validators> <validator type="regex"> <param name="filedName">username</param> <param> <![CDATA[[a-zA-z]{6,8}]]> </param> <message> 字符串由6-8位字符串组成 <message> </validator> </validators>
( 三 ) 自定义拦截器
(1)查看下Strust2定义的拦截器,通过default.xml查找一个拦截器的源码
validate() //进行的验证方法。
object //就是我们调用的Action
fieldName //配置文件中,配置的要监听的属性
getFieldValue(fieldName,object) //从Action中寻找监听的属性
要想阅读这类源码,我们需要从上往下看,因为一个类可能有多个子类,但最后的最后,父类(父接口)只有一个
fieldName: //配置文件要监听的属性
type: //监听的类型
由名字可知,Validate接口就是我们要找到的最终的接口,ValidatorSupport就是对接口的实现,FieldValidatorSupprort是其的子类,Struts2提供的一些验证器就是该类的子类,所以我们可以继承该类来实现我们自己的验证器
(二)创建验证类,实现FieldValidatorSupport
public class StrongPasswordValidator extends FieldValidatorSupport { private boolean trim = true; @Override public void validate(Object obj) throws ValidationException { // obj当前执行的动作类 String fieldName = getFieldName(); // 配置文件中,写的要验证的字段名 Object value = this.getFieldValue(fieldName, obj); // 从当前动作类找到你要验证字段名的值 if (!(value instanceof String)) { addFieldError(fieldName, obj); } else { String s = (String) value; if (trim) { s = s.trim(); } if (!isPasswordStrong(s)) { addFieldError(fieldName, obj); } } ..... }
(三) 创建配置文件
规则:在根目录下创建XML配置文件,命名随意
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"> <validators> <validator name="strongpassword" class="StrongPasswordValidator"/> </validators>
(四) 在Action包中的配置文件中使用 我们创建的验证器
<validators> <field name="username"> <field-validator type="strongpassword"> <message>强度太弱了</message> </field-validator> </field> </validators>
标签:
原文地址:http://www.cnblogs.com/xingdongpai/p/5064674.html