Struts中validator配置说明

 

1.       注意事项

1.1.       1.0不兼容validator.

1.2.       . messageReource 1.11.0中有不同的配置方式:

 

--1.0 web.xml

 <init-param>

      <param-name>application</param-name>

      <param-value>org.apache.struts.webapp.example.ApplicationResources</param-value>

    </init-param>

 

 --1.1 struts-config.xml

 <message-resources

    parameter="org.apache.struts.webapp.example.ApplicationResources"/>

 

 

 

2.       Validator实现

2.1.       validation.xml配置:

 

formset 可以含有language, country 等属性对应java.util.Locale class

   formset 配置:

   form name:对应的表单name,必须与<html:javascript> formName属性以及struts-configActionForm名称相同。

 

<field property="username"  //property是字段名称,对应ActionForm属性

depends="required, minlength,maxlength,idcard">

//dependsvalidator-rules.xml中的规则名称name

                <arg0   key="prompt.username"/> 

 //错误信息参数,错误信息文件由message-resources标签指示。参数最多4

                <arg1   key="${var:minlength}" name="minlength"

                   resource="false"/>

//resource=false说明直接以key的值作为值,而不到message-resources文件中查找对应值

//var为下面定义的变量

                <arg2   key="${var:maxlength}" name="maxlength"

                   resource="false"/>

                             <arg3   key="${var:idcardlength}" name="idcard"

                   resource="false"/>

                         <var>

                    <var-name>maxlength</var-name> //变量名

                    <var-value>16</var-value>//变量值

                </var>

                <var>

                    <var-name>minlength</var-name>

                    <var-value>3</var-value>

                </var>

                            <var>

                    <var-name>idcardlength</var-name>

                    <var-value>15</var-value>

                </var>

                     </field>

 

 

2.2.        jsp页面设置:

<html:javascript> 标签

   dynamicJavascript:动态脚本呈现的形式是只有depends中出现的规则的对象将RENDER到页面,当在页面中采用οnsubmit="return validateXXX()"等脚本时,该validateXXX方法虽然能够找到,但在validateXXX方法内部调用的方法(validator-rules.xmlCDATA内容)的脚本不会产生,除非设置了staticJavascript=true。只能自己写validateXXX方法的内部方法实现。注意此处的validateXXX方法是自动生成的,是在formName前加上”validate”形成的默认校验函数,可以采用其它名称,只需设置method属性。

staticJavascript:静态脚本将validator-rules.xmlCDATA内容写到页面上。但不会自动生成validateXXX方法及其对象。

 

只有两者结合起来,才能生成一个不需要自己在JSP上编码的脚本验证。STRUTS框架自动采用脚本对象的方式生成验证。

 

2.3.       自动表单验证ActionForm实现:

注意:此方式不是Struts validator

两种方式:

前提: struts-config.xml action validate=true

   (1)继承: ValidatorForm

   action name 属性 (struts-config.xml)对应form name 属性(validator.xml)

   (2)继承: validatorActionForm

   action path 属性(struts-config.xml)对应form name 属性(validator.xml)

继承后的类实现validate 方法,在该方法中写入需要进行的服务器端校验。该方法将先于EXECUTE方法执行。所返回的error将存入request中,用<html:errors>显示出来,页面将返回到input form,该formstruts-config.xmlactionmapping input 标签指示。

 

2.4.       Struts Validator实现:

   Struts提供了VALIDATOR来简便实现校验,包括客户端和服务器端,实现步骤如下:

首先按照2.1 2.2 配置好xmlJSP页面。然后如2.3所述创建继承于ValidatorFormActionForm类。

以上例中的idcard为例配置validator-rules.xml

<validator name="idcard"

            classname="org.apache.struts.webapp.example.QiuchunChecks"

               method="validateIDCard"

         methodParams="java.lang.Object,

                       org.apache.commons.validator.ValidatorAction,

                       org.apache.commons.validator.Field,

                       org.apache.struts.action.ActionErrors,

                       javax.servlet.http.HttpServletRequest"

              depends=""

                  msg="errors.idcard">

 

         <javascript><![CDATA[

            function validateIDCard(form) {

                var isValid = true;

                var focusField = null;

                var i = 0;

                var fields = new Array();

                oIdCard = new idcard();

                for (x in oIdCard) {

                    var field = form[oIdCard[x][0]];

                   

                    if (field.type == 'text' ) {

                       

                        var iMin = parseInt(oIdCard[x][2]("idcardlentgh"));

                        if ((trim(field.value).length > 0) && (field.value.length != iMin) && (field.value.substring(0,5)!="51010")) {

                            if (i == 0) {

                                focusField = field;

                            }

                            fields[i++] = oIdCard[x][1];

                            isValid = false;

                        }

                    }

                }

                if (fields.length > 0) {

                   focusField.focus();

                   alert(fields.join('/n'));

                }

                return isValid;

            }]]>

         </javascript>

 

      </validator>

 

 

<javascript>中为客户端脚本。

然后创建QiuchunChecks.java

package org.apache.struts.webapp.example;

 

import java.io.Serializable;

import java.util.Date;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.commons.validator.Field;

import org.apache.commons.validator.GenericTypeValidator;

import org.apache.commons.validator.GenericValidator;

import org.apache.commons.validator.ValidatorAction;

import org.apache.commons.validator.ValidatorUtil;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.validator.*;

 

public class QiuchunChecks implements Serializable {

 

    /**

     *  Commons Logging instance.

     */

    private static final Log log = LogFactory.getLog(QiuchunChecks.class);

 

    public static final String FIELD_TEST_NULL = "NULL";

    public static final String FIELD_TEST_NOTNULL = "NOTNULL";

    public static final String FIELD_TEST_EQUAL = "EQUAL";

 

  

 

    /**

     * 检查是否是正确的身份证号码,满足条件:长度为参数idcardlength的值,开头为51010,参数idcardlength在前面的validation.xml配置中

     * A <code>Null</code> will be considered an error.

     *

     * @param  bean     The bean validation is being performed on.

     * @param  va       The <code>ValidatorAction</code> that is currently being performed.

     * @param  field    The <code>Field</code> object associated with the current

     *      field being validated.

     * @param  errors   The <code>ActionErrors</code> object to add errors to if any

     *      validation errors occur.

     * @param  request  Current request object.

     * @return True if stated conditions met.

     */

    public static boolean validateIDCard(Object bean,

                                            ValidatorAction va, Field field,

                                            ActionErrors errors,

                                            HttpServletRequest request) {

 

        String value = null;

        if (isString(bean)) {

            value = (String) bean;

        } else {

            value = ValidatorUtil.getValueAsString(bean, field.getProperty());

        }

 

        if (!GenericValidator.isBlankOrNull(value)) {

            try {

                    

                int min = Integer.parseInt(field.getVarValue("idcardlength"));

                            if (value.length()!=min) {

                    errors.add(field.getKey(), Resources.getActionError(request, va, field));

                    return false;

                } else{

                            int numtemp = Integer.parseInt(value);

                                numtemp = Integer.parseInt(value.substring(0,5));

                                if (numtemp!=51010){

                                    errors.add(field.getKey(), Resources.getActionError(request,va,field));

                                    return false;

                                   }

 

                            }

                           

            } catch (Exception e) {

                errors.add(field.getKey(), Resources.getActionError(request, va, field));

                return false;

            }

        }

 

        return true;

    }

}

 

配置properties 文件(蓝字为本例使用的message)

# Standard error messages for validator framework checks

errors.required={0} is required.

errors.minlength={0} cannot be less than {1} characters.

errors.maxlength={0} cannot be greater than {2} characters.

errors.invalid={0} is invalid.

errors.byte={0} must be an byte.

errors.short={0} must be an short.

errors.integer={0} must be an integer.

errors.long={0} must be an long.

errors.float={0} must be an float.

errors.double={0} must be an double.

errors.date={0} is not a date.

errors.range={0} is not in the range {1} through {2}.

errors.creditcard={0} is not a valid credit card number.

errors.email={0} is an invalid e-mail address.

errors.idcard={0} is an invalid identity card. IdCard must have {3} length and prefix 51010!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值