struts 1.2 validate 验证框架

来源:互联网 发布:长沙软件公司 知乎 编辑:程序博客网 时间:2024/05/15 20:43

      web开发中,使用到了struts 开发组件,其在服务器端验证表单数据时使用validate框架步骤:

     1.配置环境:项目中加上struts 1.2 相应的jar包和tld文件;

     2.加入常用的验证规则validator-rules.xml;

     3.创建验证文件validation.xml 文件;

     4.在struts-config.xml配置文件引入上两文件:

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

                                                                                        /WEB-INF/validation.xml"/>
        </plug-in>

      5.在struts-config.xml 的action和form-bean的配置:

           <form-bean name="loginForm" type="form.LoginForm"/>      

                   注:form.LoginForm要继承org.apache.struts.validator.ValidatorForm  其有两个属性

                           username,password,必须提供该两个属性的get/set方法.

           或   <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>
   

          action的配置:

              <action path="/login" type="struts.action.LoginAction"

                           parameter="login" name="loginForm" scope="request"
                            validate="true" input="/WEB-INF/jsp/login.jsp">

                                               <!--诺定义了attribute,则validation的form的name已其一致-->
                    <forward name="success"

                                       path="/WEB-INF/jsp/welcome.jsp"></forward>
               </action>

     

        6.validation.xml的配置:

             <?xml version="1.0" encoding="ISO-8859-1" ?>

                      <!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>
                    </global>
               <formset>
                     <form name="loginForm">
                            <field property="username" depends="required">     
<!--required为验证规则在validator-rules.xml已经定义好,可直接使用-->
                                       <arg key="login.username"/>                             <!--其验证该action中的loginForm表单中的username若是否为null或""则验证-->
                             </field>                                                                        
<!--成功,中的username的数据不合法。页面将跳转到action中定义的input属性路径->
                             <field property="password" depends="required">   
<!-返回信息:自动封装到ActionErrors返回,required默认为errors.required--->
                                        <arg key="login.password"/>                            
<!-- 所以在资源文件中将有errors.required={0} is required!-->
                             </field>                                                                         
<!-返回给页面的{0}将由arg 的key 去找资源文件的相应的key的value填充--->
                       </form>                                                                              
<!--要是想自定required返回的信息包装到ActionErrors的key值自己定义使用:-->
                 </formset>                                                                               
<!--       <msg name="required" key="login.username.errors.required"/>           -->
                </form-validation>                                                                    <!--validator-rules.xml中还有其他验证规则mask,maxlength,minlength...-->

              资源文件:MessageResources_zh.properties           <!-资源文件的value值要是要都个{n}也可以通过<arg1 key="4" name="maxlength" />给定-->

              在struts-config.xml中引入<message-resources parameter="MessageResources" />

        7.页面login.jsp设计:

              <%@taglib prefix="html" uri="http://struts.apache.org/tags-html"%>

                <body>
                       <html:errors property="username"/><br>
                       <html:errors property="password"/><br>
                       <html:errors property="password1"/>
                       <html:form action="login.do" onsubmit="return validateLoginForm(this);">
                            用户名:<html:text property="username"></html:text><br>
                            密码:<html:password property="password"></html:password><br>
                            2密码:<html:password property="password1"></html:password><br>
                            <html:submit value="login" />
                           
<html:javascript formName="loginForm"/>                       <!--这两条语句将有struts自动生成js验证代码-->
                       </html:form>
             </body>

         8.自定验证:验证两个密码的内容一致:

                  1)在validation.xml加入

<global>
      <validator name="equalsCheck"
              classname="struts.EqualsChecks"
                method="equalsChecks"
           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.equalsCheck"/> 
    </global>

2)写类

public class EqualsChecks extends FieldChecks{
 private static final long serialVersionUID = 98237471L;
 public static boolean equalsChecks(java.lang.Object bean,  
            org.apache.commons.validator.ValidatorAction va,  
            org.apache.commons.validator.Field field,  
            ActionMessages errors,  
            org.apache.commons.validator.Validator validator,  
            javax.servlet.http.HttpServletRequest request){  
        String value2 = ValidatorUtils.getValueAsString(bean, field.getProperty());  
        if (!GenericValidator.isBlankOrNull(value2)) {  
            if(value2.equals(ValidatorUtils.getValueAsString(bean, field.getVarValue("firstProperty")))){  
                return true;  
            }  
        }   
        errors.add(field.getProperty(),Resources.getActionMessage(request, va, field));  
       return false;  
    }  

 

                 3)配置validation.xml 的form:

  <field property="password1" depends="equalsCheck,required">
    <var>
     <var-name>firstProperty</var-name>
     <var-value>password</var-value>
    </var>
  </field>

           

              初次写这东西,写的不全算面,希望同行给点意见及补充。。。

         

 

    

 

原创粉丝点击