Struts之Validator学习

来源与 Struts编程基础与实例详解
struts-config.xml如下(这里没有任何意义,因为我的目的只是验证输入,所以随便做个样子就可以了):
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >

< struts-config >
    
< data-sources  />
    
< form-beans  >
    
< form-bean  name ="myValidatorForm"  type ="com.form.MyValidatorForm"   />
    

    
</ form-beans >

    
< global-exceptions  />
    
< global-forwards  />
    
< action-mappings  >
    
< action
      
attribute ="myValidatorForm"
      input
="/index.jsp"
      name
="myValidatorForm"
      path
="/myValidator"
      scope
="request"
      type
="com.action.MyValidatorAction"   />
    

    
</ action-mappings >

    
< message-resources  parameter ="com.ApplicationResources"   />

    
<!--  校验框架的定义,必须要添加!! -->
    
< plug-in  className ="org.apache.struts.validator.ValidatorPlugIn" >
        
< set-property  property ="pathnames"
            value
="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"   />
    
</ plug-in >
</ struts-config >

 index.jsp页面:
<% @ page language="java" pageEncoding="gb2312" %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>  
<% @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
 
< html >  
    
< head >
        
< title > JSP for MyValidatorForm form </ title >
    
</ head >
    
< body >
    
< br />
        
< html:form  action ="/myValidator" >
            password : 
< html:text  property ="password" />< html:errors  property ="password" />< br />
            phone : 
< html:text  property ="phone" />< html:errors  property ="phone" />< br />
            zipCode : 
< html:text  property ="zipCode" />< html:errors  property ="zipCode" />< br />
            address : 
< html:text  property ="address" />< html:errors  property ="address" />< br />
            firstName : 
< html:text  property ="firstName" />< html:errors  property ="firstName" />< br />
            lastName : 
< html:text  property ="lastName" />< html:errors  property ="lastName" />< br />
            
< html:submit />< html:cancel />
        
</ html:form >
    
</ body >
</ html >

外观如:

与其相对的Bean,MyValidatorForm.java代码如下:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package  com.form;

import  org.apache.struts.validator.ValidatorForm;

/** 
 * MyEclipse Struts
 * Creation date: 05-11-2007
 * 
 * XDoclet definition:
 * @struts.form name="myValidatorForm"
 
*/

public   class  MyValidatorForm  extends  ValidatorForm  {         //这是唯一的特别之处
    
/*
     * Generated fields
     
*/


    
/** password property */
    
private String password;

    
/** phone property */
    
private String phone;

    
/** zipCode property */
    
private String zipCode;

    
/** address property */
    
private String address;

    
/** firstName property */
    
private String firstName;

    
/** lastName property */
    
private String lastName;

    
/*
     * Generated Methods
     
*/


    
/** 
     * Returns the password.
     * 
@return String
     
*/

    
public String getPassword() {
        
return password;
    }


    
/** 
     * Set the password.
     * 
@param password The password to set
     
*/

    
public void setPassword(String password) {
        
this.password = password;
    }


    
/** 
     * Returns the phone.
     * 
@return String
     
*/

    
public String getPhone() {
        
return phone;
    }


    
/** 
     * Set the phone.
     * 
@param phone The phone to set
     
*/

    
public void setPhone(String phone) {
        
this.phone = phone;
    }


    
/** 
     * Returns the zipCode.
     * 
@return String
     
*/

    
public String getZipCode() {
        
return zipCode;
    }


    
/** 
     * Set the zipCode.
     * 
@param zipCode The zipCode to set
     
*/

    
public void setZipCode(String zipCode) {
        
this.zipCode = zipCode;
    }


    
/** 
     * Returns the address.
     * 
@return String
     
*/

    
public String getAddress() {
        
return address;
    }


    
/** 
     * Set the address.
     * 
@param address The address to set
     
*/

    
public void setAddress(String address) {
        
this.address = address;
    }


    
/** 
     * Returns the firstName.
     * 
@return String
     
*/

    
public String getFirstName() {
        
return firstName;
    }


    
/** 
     * Set the firstName.
     * 
@param firstName The firstName to set
     
*/

    
public void setFirstName(String firstName) {
        
this.firstName = firstName;
    }


    
/** 
     * Returns the lastName.
     * 
@return String
     
*/

    
public String getLastName() {
        
return lastName;
    }


    
/** 
     * Set the lastName.
     * 
@param lastName The lastName to set
     
*/

    
public void setLastName(String lastName) {
        
this.lastName = lastName;
    }

}

 

validation.xml的文件内容如下:

<? xml version="1.0" encoding="gb2312" ?>
<! DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"
>

< form-validation >
    
< global >
        
< constant >
            
< constant-name > phone </ constant-name >
            
< constant-value >
                ^(?(d{3}))?[-| ]?(d{3})[-| ]?(d{4})$
            
</ constant-value >
        
</ constant >
        
< constant >
            
< constant-name > zip </ constant-name >
            
< constant-value > ^d{5}d*$ </ constant-value >
        
</ constant >
    
</ global >
    
< formset >
        
< form  name ="myValidatorForm" >
            
<!--  要求:不能为空,最大长度=5  -->
            
< field  property ="firstName"  depends ="required,maxlength" >
                
< msg  name ="required"  key ="errors.firstnameempty"   />
                
< msg  name ="maxlength"  key ="errors.firstlong"   />
                
< var >
                    
< var-name > maxlength </ var-name >
                    
< var-value > 5 </ var-value >
                
</ var >
            
</ field >

            
<!--  要求:不能为空,最大长度=5  -->
            
< field  property ="lastName"  depends ="required,maxlength" >
                
< msg  name ="required"  key ="errors.lastnameempty"   />
                
< msg  name ="maxlength"  key ="errors.lastnamelong"   />
                
< var >
                    
< var-name > maxlength </ var-name >
                    
< var-value > 5 </ var-value >
                
</ var >
            
</ field >

            
<!--  要求:必须是整数,不能为空,长度=5  -->
            
< field  property ="zipCode"
                depends
="required,integer,maxlength,minlength" >

                
< msg  name ="integer"  key ="errors.zipCode1"   />
                
< msg  name ="required"  key ="errors.zipCode2"   />
                
< msg  name ="maxlength"  key ="errors.zipCode3"   />
                
< msg  name ="minlength"  key ="errors.zipCode3"   />
                
< var >
                    
< var-name > maxlength </ var-name >
                    
< var-value > 5 </ var-value >
                
</ var >
                
< var >
                    
< var-name > minlength </ var-name >
                    
< var-value > 5 </ var-value >
                
</ var >
            
</ field >
            
<!--  要求:这里使用了自定义校验规则,
                为此你需要: 1.创建包含了Java类的检验方法
                           2.修改validator-rules.xml,把自定义的数据校验规则和校验程序关联起来
                           3.修改validation.xml,(这是下面所在的)
              
-->
            
< field  property ="phone"  depends ="phone" >
                
< msg  name ="phone"  key ="errors.phone"   />
            
</ field >
            
<!--  要求:这里使用了自定义校验规则  -->
            
< field  property ="password"  depends ="required,password" >
                
< msg  name ="password"  key ="errors.passwordwrong"   />
                
< msg  name ="required"  key ="errors.passwordempty"   />
            
</ field >

        
</ form >
    
</ formset >
</ form-validation >
创建包含了Java类的检验方法CustomValidator.java:
package  myvalidator;

import  java.io.Serializable;

import  javax.servlet.http.HttpServletRequest;

import  org.apache.commons.validator.Field;
import  org.apache.commons.validator.GenericValidator;
import  org.apache.commons.validator.Validator;
import  org.apache.commons.validator.ValidatorAction;
import  org.apache.commons.validator.util.ValidatorUtils;
import  org.apache.struts.action.ActionMessages;
import  org.apache.struts.validator.Resources;

// 创建包含了Java类的检验方法
public   class  CustomValidator  implements  Serializable  {

    
// 判断phone
    public static boolean validatePhone(Object bean, // 被校验的ActionForm名称
            ValidatorAction va, // 代表了validator-rules.xml中的一个<validato>元素的内容
            Field field, // 被校验的字段
            ActionMessages errors, // 用来返回所有的出错信息
            Validator validator, // 当前使用的validator实例,一般一个应用只有一个
            HttpServletRequest request) // 当前使用的request对象
    {
        String value 
= null;

        
if (isString(bean))
            value 
= (String) bean;
        
else
            value 
= ValidatorUtils.getValueAsString(bean, field.getProperty());

        
// 如果phone字段为空,则不做校验,留给depends="required"搞定
        if (GenericValidator.isBlankOrNull(value)) {
            
return true;
        }
 else {
            
// 不能是字母
            for (int i = 0; i < value.length(); i++{
                
char c = value.charAt(i);
                
if ((c >= 'a' && c <= 'z'|| (c >= 'A' && c <= 'Z')) {

                    errors.add(field.getKey(), Resources.getActionMessage(
                            validator, request, va, field));
                    
return false;
                }

            }

        }

        
return true;

    }


    
protected static boolean isString(Object o) {
        
return o != null ? (java.lang.String.class).isInstance(o) : true;
    }


    
// 判断password
    public static boolean validatePassword(Object bean, ValidatorAction va,
            Field field, ActionMessages errors, Validator validator,
            HttpServletRequest request) 
{

        String value 
= null;

        
if (isString(bean))
            value 
= (String) bean;
        
else
            value 
= ValidatorUtils.getValueAsString(bean, field.getProperty());

        
// 如果password字段为空,则不做校验
        if (GenericValidator.isBlankOrNull(value)) {
            
return true;
        }
 else {
            
// 密码不能是111111,纯属实验
            if (value.equals("111111")) {
                errors.add(field.getKey(), Resources.getActionMessage(
                        validator, request, va, field));
                
return false;
            }
 else {
                
return true;
            }

        }


    }


}
//
之后在validator-rules.xml添加如下代码:
<!--     以下为自定义phone的……         -->
        
< validator  name ="phone"  classname ="myvalidator.CustomValidator"
            method
="validatePhone"
            methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

            depends
=""  msg ="errors.phone"   />

        
<!--     以下为自定义password的……         -->
        
< validator  name ="password"  classname ="myvalidator.CustomValidator"
            method
="validatePassword"
            methodParams
="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       org.apache.commons.validator.Validator,
                       javax.servlet.http.HttpServletRequest"

            depends
=""  msg ="errors.passwordwrong"   />
最后ApplicationResources_zh.properties修改内容如下:
# Resources for parameter 'com.ApplicationResources'
# Project S_Validator
errors.firstnameempty
= 姓不能为空
errors.firstlong
= 姓的长度不能超过5个字符

errors.lastnameempty
= 名不能为空
errors.lastnamelong
= 名的长度不能超过5个字符




errors.zipCode1
= zipCode必须是整数
errors.zipCode2
= zipCode不能为空
errors.zipCode3
= zipCode长度必须为5


errors.phone
= 电话号码不能是字母

errors.passwordwrong
= 密码不能是111111(纯属实验)
errors.passwordempty
= 密码不能为空
结果如下:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值