关于表单验证的一些东西

来源:互联网 发布:淘宝网怎么卖游戏账号 编辑:程序博客网 时间:2024/05/07 22:35

一  表单验证
1. 首先写一个×.jsp页面,在页面中写了一个form,表单提交给一个action,比如show.do
2. 要写一个Form类,继承ActionForm或是它的子类,该类中的属性值必须与form表单中

的name值相同,并且要提供getter和setter方法。
3. 写一个action类,并进行继承struts提供的Action类。
4. 写配置文件
  <form-beans>
      <form-bean name="showForm" type="form.ShowForm"/>
  </form-beans>
  <action-mappings>
      <action path="/show"
               type="action.ShowAction"
               name="showForm"  //name值必须与form-bean中的name值一致
               attribute="sf"  //tomcat会把提交数据以attribute中定义的名字存入到

session中,缺省为name的值
               validate="true" //是否进行验证
               scope="request" //可以设置存数据的对象,默认是session
  </action-mappings>
5.若继承的是ActionForm类,还需重写validate方法,在validate方法中写验证逻辑。


二 表单验证的方法
1. 继承ActionForm类,重写validate方法
2. 使用validator框架进行验证,即继承ValidatorForm类,此时若没有特别要求,可以不

用重写validate方法,只需写一个validation.xml配置文件,在该配置文件中写一些验证逻

辑。一些错误信息可以写在资源文件中,然后再页面中通过<html:errors  />来显示。
 需要特别注意的是,在用validator框架进行验证时,还必须在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>


三 对validate方法的扩展(验证结束日期必须大于开始日期)

1.页面 show.jsp
<body>
<html:form action="some" method="post">
    用户名:<html:text property="username" />
    <html:errors property="username" /><br/>
    密码:<html:password property="password" />
    <html:errors property="password" /><br/> // 显示错误信息
    开始时间:<html:text property="startTime" />
    <html:errors property="startTime" /><br/>
    结束时间:<html:text property="endTime" />
    <html:errors property="endTime" />
    <html:errors property="startend" /><br/>
    <input type="submit" value="Submit" />
</html:form>
</body>

2.SomeForm类,继承ValidatorForm
   重写validate方法:
   public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
            //调用父类的validate方法
 ActionErrors errors = super.validate(mapping, request);
 SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT);
            //如果开始日期和结束日期都已经通过验证,则执行下列操作
            //默认用属性名作为key值
 if (errors.size("startTime") == 0 && errors.size("endTime") == 0) {
     try {
                    //日期格式转换String-->Date
         Date startDate = format.parse(startTime);
         Date endDate = format.parse(endTime);
                    //两个日期间进行比较,若结束日期小于开始日期,则往errors中添加  

                    //错误信息,errors.startAndend在资源文件中配置
                    if (endDate.compareTo(startDate) < 0) {
           errors.add("startend", new ActionMessage("errors.startAndend"));
         }
     } catch (ParseException e) {
  e.printStackTrace();
     }
 }
 return errors; //返回错误信息
    }

3.资源文件
errors.required {0}不能为空
errors.minlength {0}长度不能小于6
errors.date 日期格式为'yyyy-MM-dd'
user.name 用户名
user.password 密码
user.startTime 开始时间
user.endTime 结束时间
errors.startAndend 开始时间必须大于结束时间

4.struts-config.xml 配置文件
 <form-bean name="someForm" type="form.SomeForm" />
 <action path="/show"
            //struts提供的一个类,可以直接转发到页面
            type="org.apache.struts.actions.ForwardAction"
            parameter="/WEB-INF/jsp/show.jsp">
    </action>
    <action path="/some"
            type="action.SomeAction"
            name="someForm" //该name的值必须与form-bean中的name值相同
            validate="true"
            input="/show.do">
    </action>
// 注意这个一定不能少,否则抛出异常
<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.validation.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<form-validation>
    <formset>
        <form name="someForm"> //attribute的值,没有指定,默认是name的值
            <field property="username" depends="required">
                <arg key="user.name" position="0" />
            </field>
            <field property="password" depends="required,minlength" >
                <arg key="user.password" position="0" />
                <var>
                    <var-name>minlength</var-name>
                    <var-value>6</var-value>
                </var>
              
            </field>
            <field property="startTime" depends="required,date">
                <arg key="user.startTime" position="0"></arg>
                <var>
                    <var-name>datePattern</var-name>
                    <var-value>yyyy-MM-dd</var-value>
                </var>
            </field>
            <field property="endTime" depends="required,date">
                <arg key="user.endTime" position="0"></arg>
                <var>
                    <var-name>datePattern</var-name>
                    <var-value>yyyy-MM-dd</var-value>
                </var>
            </field>
        </form>
    </formset>
</form-validation>

 

第一次写这个东西,写的不好还请见谅。如果觉得哪里有问题,请提出来,我好改进!!!

原创粉丝点击