关于在struts中使用validator,经过半天实践,有了些许体会(以struts1.2.7为例子)。
  步骤如下:
  (1)下载struts-1.2.7.zip,解压后,将webapps中的struts-examples.war解开,在WEB-INF文件夹中找到validator-rules.xml,还有WEB-INF\validator中的validation.xml。
  (2)我用的是eclipse3.1.1+MyEclipse4.0.3,在eclipse中新建一个myeclipse的web project,再add struts capabilities,选struts 1.2,把相应的struts框架需要的文件复制到web project中。
  (3)将步骤1中找到的2个xml文件复制到web project的WEB-INF文件夹下,然后在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>
  (4)打开validator-rules.xml,可以看到在步骤3要添加的一段内容,下面还有一段如下:
# 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.
  把这段复制到classes里的ApplicationResources.properties文件中。
  (5)建立一个form-bean,用MyEclipse很快的,不知道怎么做的话就此打住,去学好基本功。我用一个loginForm做例子,有2个属性:name和password。
  (6)打开validation.xml,去掉<form-validation>节中的所有内容,新加入
<formset>      
      
<form name="loginForm">
        
<field property="name" depends="required">
            
<arg0 key="label.Name"></arg0>
        
</field>
        
<field property="password" depends="email">
            
<arg0 key="label.password"></arg0>
        
</field>        
      
</form>
  
</formset>
  label.Name和label.password在ApplicationResources.properties文件中有定义。
  (7)在要进行验证的那个form中加入
onsubmit="return validateLoginForm(this)"
关于后面这个validateLoginForm是validate+ActionForm名称。再在要验证的页面加入
<html:javascript formName="loginForm"/>
  这里的formName,就是在validation中定义的<form name="loginForm">。
  (8)ok,发布后就可以看到效果了,是在客户端进行验证,错误是弹出式显示的。
  注意:ApplicationResources.properties中属性值定义成中文会使得验证失效,具体原因是jsp页面需要加上
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
  最重要的是那个charset。
  (9)客户端验证还是不怎么保险,ok,现在弄个服务器端验证。
  (10)上面用MyEclipse定义form-bean的时候,自动生成了一个ActionForm,在struct-config.xml中,可以在form-bean一节中找到type属性指向这个ActionForm,把它改一下,变成:
<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm" >
        
<form-property name="name" type="java.lang.String"></form-property>
        
<form-property name="password" type="java.lang.String"></form-property>
    
</form-bean>
  这样,执行的时候会动态生成ActionForm,可以把原来的ActionForm删除了。然后,修改相应的Action类,里面自己定义的ActionForm要换成DynaValidatorForm,取属性的方法也变为(form).get("属性名称")。
  再到相应的jsp页面把onsubmit部分删除,此外,还要删除<html:javascript 部分。
  (11)ok,发布后就可以看效果了,验证部分的代码,客户端是看不到了,错误信息直接跟在输入框后面,笔弹出式的要好,问题就是服务器端的负担加重了,但是我认为这是必要的,客户端的验证不保险。
  除了上面的2种方法外,在struts中应用validator还有方法,ActionForm还可以继承别的类实现验证,这里就不说了,上面的2种是比较简单的。
 posted on 2005-11-06 19:24  往事如风  阅读(2037)  评论(4编辑  收藏  举报