DynaValidatorForm类

来源:互联网 发布:影楼美工师招聘 编辑:程序博客网 时间:2024/05/29 09:15

DynaValidatorForm类

DynaValidatorForm是DynaActionForm的子类,它能够提供动态ActionForm和自动表单输入验证的功能。和使用DynaActionForm类似,你必须首先在配置文件中进行配置:


<form-beans>
 <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
  <form-property name="actionClass" type="java.lang.String"/>    
  <form-property name="username" type="java.lang.String"/>
  <form-property name="password" type="java.lang.String"/> 
 </form-bean>
</form-beans>

 

 

同时要定义验证的插件:


  <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.xml和validator-rules.xml分别表示验证定义和验证规则的内容(可以合并在一起),比如针对上例中的DynaValidatorForm,我们有如下验证定义(validator.xml):


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC 
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN" 
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<!--    Validation Rules    $Id: validation.xml-->

<form-validation> 
<!-- ========== Default Language Form Definitions ===================== -->
<formset> 
 <form name="loginForm">    
  <field property="username" depends="required, minlength,maxlength">
   <arg0   key="prompt.username"/>         
   <arg1   key="${var:minlength}" name="minlength" resource="false"/>      
   <arg2   key="${var:maxlength}" name="maxlength" 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>      
  </field>    
  <field property="password" depends="required, minlength,maxlength" bundle="alternate">         
   <arg0   key="prompt.password"/>  
   <arg1   key="${var:minlength}" name="minlength" resource="false"/>         
   <arg2   key="${var:maxlength}" name="maxlength" 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>       
  </field>   
 </form>  
</formset>
</form-validation>


 

从上述定义中,我们可以看到对于字段username有三项验证:required, minlength, maxlength,意思是该字段不能为空,而且长度在3和16之间。而validator-rules.xml文件则可以采用Struts提供的缺省文件。注意在<form-bean>中定义的form是如何与validation.xml中的form关联起来的。最后,要启动自动验证功能,还需要将Action配置的validate属性设置为true。

 

<action path="/login" 
type="com.ncu.test.LoginAction"
name="loginForm"         
scope="request"        
input="tile.userLogin"validate="true">

 

 

此时,Struts将根据xml配置文件中的定义来检验表单输入,并将不符合要求的错误信息输出到页面。但是你可能会想:这个功能虽然好,可是什么检验都跑到服务器端执行,效率方面和用户易用性方面是不是有些问题?你可能会怀念起那简单的JavaScript客户端验证。

不用担心,在Struts 1.1中也支持JavaScript客户端验证。如果你选择了客户端验证,当某个表单被提交以后,Struts 1.1启动客户端验证,如果浏览器不支持JavaScript验证,则服务器端验证被启动,这种双重验证机制能够最大限度地满足各种开发者的需要。 JavaScript验证代码也是在validator-rules.xml文件中定义的。要启动客户端验证,你必须在相应的JSP文件中做如下设置:


为<html:form>增加onsubmit属性
设置Javascript支持
 

下表中列出了一JSP文件的示例代码,红字部分为Javascript验证所需代码。


<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<table bgcolor="#9AFF9A" cellspacing="0" cellpadding="10" border="1" width="100%">
 <tr>
 <td>
 <table cellspacing="0" cellpadding="0" border="0" width="100%">
 <tr bgcolor="#696969">
  <td align="center">    
  <font color="#FFFFFF">Panel 3: Profile</font> 
  </td>
  </tr>
 <tr> 
  <td><br>
  <html:errors/> 
  <html:form action="/login.do" focus="username"  onsubmit="return validateLoginForm(this);"> 
  <html:hidden property="actionClass"/>  
  <center>     
  <table>     
   <tr>       
   <td>UserName:</td> 

<td><html:text property="username" size="20"/></td> </tr> <tr> <td>Password:</td> <td><html:password property="password" size="20"/></td> </tr> <tr> <td colspan=2><html:submit property="submitProperty" value="Submit"/></td> </table> </center> </html:form> <html:javascript formName="loginForm" dynamicJavascript="true" staticJavascript="false"/> <script language="Javascript1.1" src="staticJavascript.jsp"></script> </td> </tr> </table> </td> </tr> </table>
 


其中onsubmit的值为"return validateLoginForm(this);",它的语法为:

return validate + struts-config.xml中定义的form-bean名称 + (this);

staticJavascript.jsp的内容为:


<%@ page language="java" %>
<%-- set document type to Javascript (addresses a bug in Netscape according to a web resource --%>
<%@ page contentType="application/x-javascript" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:javascript dynamicJavascript="false" staticJavascript="true"/> 

文章出处:http://www.diybl.com/course/3_program/java/javashl/200855/112967.html

原创粉丝点击