你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
struts静态动态ActionForm使用 —验证
 
 第一种:重写ActionForm的validate方法。
  
    在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息,然后在错误页打印错误信息。
    [html]  
public ActionErrors validate(ActionMapping mapping,  
        HttpServletRequest request) {  
  
  ActionErrors errors=new ActionErrors();  
  if(username==null||"".equals(username)){  
     errors.add(username, new ActionMessage("error.username",username));  
  }  
  if(password==null || "".equals(password)){  
      errors.add("password",new ActionMessage("error.password",password));  
  }  
  if(!(birthday instanceof Date)){  
      errors.add("birthday",new ActionMessage("error.birthday",birthday));  
  }  
  
  return errors;  
}  
 
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
 
 ActionErrors errors=new ActionErrors();
 if(username==null||"".equals(username)){
errors.add(username, new ActionMessage("error.username",username));
 }
 if(password==null || "".equals(password)){
 errors.add("password",new ActionMessage("error.password",password));
 }
 if(!(birthday instanceof Date)){
 errors.add("birthday",new ActionMessage("error.birthday",birthday));
 }
 
 return errors;
}         
      代码解释:
      使用这种ActionForm再带的验证方式,在配置文件中需要设置此action的validate属性为true,并且也要设置出现错误返回的错误页input属性。
      struts-config.xml中action的配置如下: 
[html] 
<action-mappings>  
    <action path="/login" type="com.login.LoginAction" name="loginForm"  
        scope="request" input="/login/error.jsp" validate="true">  
        <forward name="success" path="/login/success.jsp"></forward>  
        <forward name="false" path="/login/false.jsp"></forward>  
    </action>  
</action-mappings>  
 
<action-mappings>
<action path="/login" type="com.login.LoginAction" name="loginForm"
scope="request" input="/login/error.jsp" validate="true">
<forward name="success" path="/login/success.jsp"></forward>
<forward name="false" path="/login/false.jsp"></forward>
</action>
</action-mappings>
     其中为了把错误显示出来,我们使用资源文件方式。
     在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是资源文件的key值。
     配置文件中加载资源文件:  
[html] 
<!--     加载资源文件 -->  
    <message-resources parameter="MessageResources" />  
 
<!--  加载资源文件 -->
    <message-resources parameter="MessageResources" />     注意资源文件放在src下。若是放在WebContent目录或web-inf下,则不会提示相应的错误信息。即使不报错。
     并且上述的日期,其中使用Register注册了,上篇博客已经介绍,在此不再过多介绍。
     这个action自带的验证的demo已经上传。点我下载
     
     第二种:使用validator框架。
     其中validate验证,主要是由commons-validator.jar包。
     那如何使用validator框架呢?
     1.actionForm使用validator框架。
       首先:编写actionForm
       注意此时的actionForm不是继承ActionForm,而是继承ValidatorForm。
       其中actionform中只有getset方法
       其次:编写配置文件struts-config.xml中,加载验证插件以及使用资源文件。     
[html]  
<!--     加载资源文件 -->  
    <message-resources parameter="MessageResources" />  
<!--     验证插件 -->  
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
    <set-property  
        property="pathnames"  
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>  
  </plug-in>  
 
<!--  加载资源文件 -->
    <message-resources parameter="MessageResources" />
<!--     验证插件 -->
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
        property="pathnames"
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>       其中,validator-rules.xml是公共的。而这个validation.xml是需要程序员编写。
      然后:编写validation.xml验证信息。   
[html] 
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!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>  
    <formset>  
<!--        form 的name必须与struts-config中名称一致 -->  
        <form name="loginForm">  
            <field property="username"  depends="required">  
                   <!-- key值必须与资源文件中名称一致 -->  
                    <arg key="error.username"/>  
            </field>  
      
            <field property="password" depends="required">  
                    <arg key="error.password"/>  
            </field>  
              
            <field property="birthday" depends="date">  
                 <arg key="error.birthday"/>  
            </field>     
        </form>  
    </formset>  
</form-validation>  
 
<?xml version="1.0" encoding="UTF-8" ?>
 
<!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>
    <formset>
<!--        form 的name必须与struts-config中名称一致 -->
        <form name="loginForm">
            <field property="username"  depends="required">
                   <!-- key值必须与资源文件中名称一致 -->
                    <arg key="error.username"/>
            </field>
    
            <field property="password" depends="required">
                    <arg key="error.password"/>
            </field>
            
            <field property="birthday" depends="date">
                 <arg key="error.birthday"/>
            </field>   
        </form>
    </formset>
</form-validation>     formset可以包含多个form,并且form中需要验证的属性使用field标签。其中depends依赖验证规则的中的信息validator-rules.xml中的规则。比如:required,要求必填,date,日期格式,long,byte,mask正则等等。
     其中的key值必须与资源文件的key一致。如第一种方法。
    2.动态actionform使用validator框架。
     动态的actionform在上篇博客已经介绍。在1的基础上,只改一下struts-config.xml配置文件中的动态actionform 
[html]  
<!--     动态验证form -->  
    <form-beans>  
      <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">  
        <form-property name="username" type="java.lang.String"></form-property>  
        <form-property name="password" type="java.lang.String"></form-property>  
        <form-property name="birthday" type="java.util.Date"></form-property>  
        
      </form-bean>  
    </form-beans>  
 
<!--  动态验证form -->
    <form-beans>
      <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
        <form-property name="username" type="java.lang.String"></form-property>
        <form-property name="password" type="java.lang.String"></form-property>
        <form-property name="birthday" type="java.util.Date"></form-property>
      
      </form-bean>
    </form-beans>      其他的不用改变。
      但是需要注意的是:使用validator框架的动态actionform的type类型是:DynaValidatorForm而不是DynaActionForm
    3.应用在客户端,使用js提示。
      在1的基础上只改一个login.jsp其他的不用改。
      添加onsumit,并且添加个html:javascript标签     
[html] 
<html:javascript formName="loginForm"/>  
 <html:form action="login.do" onsubmit="return validateLoginForm(this)">  
      username : <html:text property="username"/><br/>  
      password : <html:password property="password"/><br>  
      birthday: <html:text property="birthday"></html:text>  
   <html:submit/>  www.2cto.com
  </html:form>  
 
<html:javascript formName="loginForm"/>
 <html:form action="login.do" onsubmit="return validateLoginForm(this)">
     username : <html:text property="username"/><br/>
    password : <html:password property="password"/><br>
    birthday: <html:text property="birthday"></html:text>
   <html:submit/>
  </html:form>    需要注意的是:其中action不能使用"../",否则提示错误。
    并且并不是所有的服务器校验都可以转化成客户端的js提示,其中日期的合法性验证,就不能转化成客户端js提示。
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089