Struts验证框架应用

验证框架应用
一共有4种方法,

是在form.bean的表单(继承自ActionForm)自定义的validate方法和reset方法,这种方法的缺点在于:如果
有很多页面,需要提交表单,则会有很多ActionForm编写同样的逻辑代码。

第二种方法

Action中编写逻辑业务的验证,这种方法是在Action的子类中的execute方法中写具体的业务逻辑。

第三种方法

验证框架验证,validator-rules.xml和validation.xml两个文件。同时在struts-config.xml中进行配置。

同时那个FormBean文件,必须继承自ValidatorForm而不是ActionForm
struts-config.xml中,validator是作为插件的一个框架。

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>

jsp页面中,如何运用这样的验证框架

    <html:form action="/login">
            请输入姓名:
            <html:text property="username" />
            <html:errors property="username" />
            <br />
            请输入密码:
            <html:text property="password" />
            <html:errors property="password" />
            <br />
            <html:submit />
            <html:cancel />
        </html:form>

validation.xml文件内容

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 校验规则的头文件,包含DTD等信息 -->
<!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>
    <!-- 所有需要校验的form都放在formset元素里面 -->
    <formset>
        <!-- 定义需要验证的表单,此处的name必须与struts-config.xml中的ActionForm名字保持一致 -->
        <form name="loginForm">
            <!-- 定义username域,需要满足必填规则 -->
            <field property="username" depends="required">
                <arg0 key="insert.error.name" />
            </field>
            <!-- 定义password域,需要满足必填规则 -->
            <field property="password" depends="required">
                <arg0 key="insert.error.pass" />
            </field>
        </form>
    </formset>
</form-validation>

validator-rules.xml这个是系统文件,不需要怎么改变的…

<!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">
<!--
    $Id: validator-rules.xml 159291 2005-03-28 20:19:29Z niallp $

    This file contains the default Struts Validator pluggable validator
    definitions.  It should be placed somewhere under /WEB-INF and
    referenced in the struts-config.xml under the plug-in element
    for the ValidatorPlugIn.

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
    /WEB-INF/validation.xml"/>
    </plug-in>

    These are the default error messages associated with
    each validator defined in this file.  They should be
    added to your projects ApplicationResources.properties
    file or you can associate new ones by modifying the
    pluggable validators msg attributes in this file.

    # Struts Validator Error Messages
    errors.required={0} is required.
    errors.minlength={0} can not be less than {1} characters.
    errors.maxlength={0} can not be greater than {1} characters.
    errors.invalid={0} is invalid.

    errors.byte={0} must be a byte.
    errors.short={0} must be a short.
    errors.integer={0} must be an integer.
    errors.long={0} must be a long.
    errors.float={0} must be a float.
    errors.double={0} must be a double.

    errors.date={0} is not a date.
    errors.range={0} is not in the range {1} through {2}.
    errors.creditcard={0} is an invalid credit card number.
    errors.email={0} is an invalid e-mail address.

    Note: Starting in Struts 1.2.0 the default javascript definitions have
    been consolidated to commons-validator. The default can be overridden
    by supplying a <javascript> element with a CDATA section, just as
    in struts 1.1.

-->

<form-validation>

    <global>

        <validator name="required"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateRequired"
            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"
            msg="errors.required" />

        <validator name="requiredif"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateRequiredIf"
            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"
            msg="errors.required" />

        <validator name="validwhen" msg="errors.required"
            classname="org.apache.struts.validator.validwhen.ValidWhen"
            method="validateValidWhen"
            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" />


        <validator name="minlength"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateMinLength"
            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.minlength"
            jsFunction="org.apache.commons.validator.javascript.validateMinLength" />


        <validator name="maxlength"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateMaxLength"
            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.maxlength"
            jsFunction="org.apache.commons.validator.javascript.validateMaxLength" />



        <validator name="mask"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateMask"
            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.invalid" />


        <validator name="byte"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateByte"
            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.byte" jsFunctionName="ByteValidations" />


        <validator name="short"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateShort"
            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.short" jsFunctionName="ShortValidations" />


        <validator name="integer"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateInteger"
            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.integer" jsFunctionName="IntegerValidations" />



        <validator name="long"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateLong"
            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.long" />


        <validator name="float"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateFloat"
            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.float" jsFunctionName="FloatValidations" />

        <validator name="double"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateDouble"
            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.double" />


        <validator name="date"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateDate"
            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.date" jsFunctionName="DateValidations" />


        <validator name="intRange"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateIntRange"
            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="integer" msg="errors.range" />


        <validator name="floatRange"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateFloatRange"
            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="float" msg="errors.range" />

        <validator name="doubleRange"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateDoubleRange"
            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="double" msg="errors.range" />


        <validator name="creditCard"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateCreditCard"
            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.creditcard" />


        <validator name="email"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateEmail"
            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.email" />

        <validator name="url"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateUrl"
            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.url" />

        <!--
            This simply allows struts to include the validateUtilities into a page, it should
            not be used as a validation rule.
        -->
        <validator name="includeJavaScriptUtilities" classname=""
            method="" methodParams="" depends="" msg=""
            jsFunction="org.apache.commons.validator.javascript.validateUtilities" />

    </global>

</form-validation>

第四种

使用DynaValidatorForm的验证

struts-config.xml源代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
    <form-beans>
        <form-bean name="loginForm"
            type="org.apache.struts.validator.DynaValidatorForm">
            <form-property name="username" type="java.lang.String" />
            <form-property name="password" type="java.lang.String" />
        </form-bean>
    </form-beans>
    <action-mappings>
        <action path="/login" name="loginForm" scope="request"
            type="org.njy.validator.action.LoginAction" validate="true"
            input="/login.jsp">
            <forward name="succ" path="/success.jsp" />
            <forward name="error" path="/wrong.jsp" />
        </action>
    </action-mappings>
    <message-resources parameter="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>

jsp页面如下所示:

<html:form action="/login">
            请输入姓名:
            <html:text property="username" />
            <html:errors property="username" />
            <br />
            请输入密码:
            <html:text property="password" />
            <html:errors property="password" />
            <br />
            <html:submit />
            <html:cancel />
        </html:form>

validation.xml如下

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 校验规则的头文件,包含DTD等信息 -->
<!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>
    <!-- 所有需要校验的form都放在formset元素里面 -->
    <formset>
        <!-- 定义需要验证的表单,此处的name必须与struts-config.xml中的ActionForm名字保持一致 -->
        <form name="loginForm">
            <!-- 定义username域,需要满足必填规则 -->
            <field property="username" depends="required">
                <arg0 key="insert.error.name" />
            </field>
            <!-- 定义password域,需要满足必填规则 -->
            <field property="password" depends="required">
                <arg0 key="insert.error.pass" />
            </field>
        </form>
    </formset>
</form-validation>

validator-rule.xml不变。
最后附录一个Structs校验功能的代码,主要写的是注册信息的验证!
http://download.csdn.net/detail/chengyangyy/9117173

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值