zoukankan      html  css  js  c++  java
  • struts中validator使用笔记【原创】

      关于在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种是比较简单的。
  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/zxub/p/270168.html
Copyright © 2011-2022 走看看