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>
posted on 2007-07-03 11:32  王永庆  阅读(937)  评论(0编辑  收藏  举报