1、注册我们的验证类型:
webwork验证是通过验证类型来实现的,验证类型是通过类(该类必需实现com.opensymphony.xwork.validator.Validator接口,或者继承ValidatorSoupport,FieldValidatorSupport等)来实现的,在使用验证类型之前,必需要在validatorFactory中注册,一般使用配置文件validators.xml进行注册,要求把文件validators.xml放到ClassPath的根目录中。
<validators>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
2、开启Action的验证功能:
在xwork.xml中加入<interceptor class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
3、实现我们的验证文件(也就是规则):
我们的验证文件必需以ActionName-validation.xml格式命名,他必需被放置到与这个Action相同的包中。
格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="count">
<field-validator type="required">
<message>You must enter a value for count.</message>
</field-validator>
<field-validator type="int">
<param name="min">0</param>
<param name="max">5</param>
<message>
count must be between ${min} and ${max}, current value is ${count}.
</message>
</field-validator>
</field>
</validators>
(1)、<field>标签代表一个字段,属性"name"和页面输入框的"name"属性必需完全一致。
(2)、<field-validator>标签定义我们的验证规则,type属性的值就是我们前面定义的验证类型。
(3)、验证文件中,字段数据是通过表达式语言从我们的值堆栈中取得,一般是Action对象。
(4)、不管验证是否通过,我们的Action都会执行,但是如果验证没有通过,他不会调用Action的execute()方法。
4、验证Action的写法:
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ValidationAware;
public class SimpleAction extends ActionSupport implements ValidationAware {
private int count;
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public String execute(){
//在这里调用用户注册的业务逻辑,比如:将注册信息存储到数据库
return SUCCESS;
}
}
5、xwork.xml中需要注意的地方:
<action name="validation" class="com.wyq.login.action.SimpleAction">
<result name="success" type="dispatcher">
<param name="location">/login/simple_result.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
这里是最重要的,不符合条件的都从下面输出,这里也是必需声明的
<!-- If you don't override execute(), you must do this: -->
<result name="input" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
<interceptor-ref name="validator" />
<interceptor-ref name="debugStack" />
<interceptor-ref name="defaultStack" />
</action>
webwork验证是通过验证类型来实现的,验证类型是通过类(该类必需实现com.opensymphony.xwork.validator.Validator接口,或者继承ValidatorSoupport,FieldValidatorSupport等)来实现的,在使用验证类型之前,必需要在validatorFactory中注册,一般使用配置文件validators.xml进行注册,要求把文件validators.xml放到ClassPath的根目录中。
<validators>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
2、开启Action的验证功能:
在xwork.xml中加入<interceptor class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
3、实现我们的验证文件(也就是规则):
我们的验证文件必需以ActionName-validation.xml格式命名,他必需被放置到与这个Action相同的包中。
格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="count">
<field-validator type="required">
<message>You must enter a value for count.</message>
</field-validator>
<field-validator type="int">
<param name="min">0</param>
<param name="max">5</param>
<message>
count must be between ${min} and ${max}, current value is ${count}.
</message>
</field-validator>
</field>
</validators>
(1)、<field>标签代表一个字段,属性"name"和页面输入框的"name"属性必需完全一致。
(2)、<field-validator>标签定义我们的验证规则,type属性的值就是我们前面定义的验证类型。
(3)、验证文件中,字段数据是通过表达式语言从我们的值堆栈中取得,一般是Action对象。
(4)、不管验证是否通过,我们的Action都会执行,但是如果验证没有通过,他不会调用Action的execute()方法。
4、验证Action的写法:
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ValidationAware;
public class SimpleAction extends ActionSupport implements ValidationAware {
private int count;
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public String execute(){
//在这里调用用户注册的业务逻辑,比如:将注册信息存储到数据库
return SUCCESS;
}
}
5、xwork.xml中需要注意的地方:
<action name="validation" class="com.wyq.login.action.SimpleAction">
<result name="success" type="dispatcher">
<param name="location">/login/simple_result.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
这里是最重要的,不符合条件的都从下面输出,这里也是必需声明的
<!-- If you don't override execute(), you must do this: -->
<result name="input" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
<interceptor-ref name="validator" />
<interceptor-ref name="debugStack" />
<interceptor-ref name="defaultStack" />
</action>