`
农村哥们
  • 浏览: 293268 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

配置Validator验证框架

阅读更多
引用
主要依赖与两个.jar文件
Jakarta-oro.jar
Commons-validator.jar

这个是在struts-config.xml文件中如下加入配置之后即代表该工程已经使用验证框架的插件了

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> 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
                                                  /WEB-INF/validation.xml"/>
</plug-in> 
完成好了之后以注册的例子说明它的主要使用方法
1.建立一个注册的页面;包含用户名: 密码: 年龄: 邮箱:都不能为空。密码长度必须大于或等于8位,邮箱格式验证等
显示方式一:使用错误消息显示在相应的控件后面。
2.建立注册页相对应的表单Bean(ActionForm),重点在这里,因为要使用验证框架的话该表单类需要修改
1)修改该类的继承

Java代码
import org.apache.struts.validator.ValidatorForm;// 导入要继承的类   
public class 表单类 extends ValidatorForm //修改继承类 

  import org.apache.struts.validator.ValidatorForm;// 导入要继承的类
  public class 表单类 extends ValidatorForm //修改继承类 
2) //修改该类且不包含validate()方法.
3、在validation.xml 中配置验证规则
  这个验证规则依赖与validator-rules.xml此文件已经配置好的验证类
  大概介绍几种规则吧{}中的为参数
   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.range={0} is not in the range {1} through {2}.{0}是不能在{1}与{2}之间

Xml代码
<form-validation>   <!--以下是配置一些常用的验证规则 --> 
  <formset>   
<form name="regActionForm">    
<!--表单名,为验证哪个表单而配置,这里的name指定struts中form-bean的别名 --> 
    <field property="username" depends="required">   
      <arg0 key="tip.username"/>   
    </field>         arg0指要为该规则传入的第一个参数   
<!--property为表单中的属性,depends为要验证的规则key为消息资料文件中的配置键 --> 
<!-- 验证密码最小长度不小于8位 要一个控件属性验证两个规则的话真正以逗号分开, -->   
 
<field property="userpass" depends="required,minlength">   
      <arg0 key="tip.userpass"/>   
      <arg1 key="${var:minlength}" name="minlength" resource="false"/>   
      <var>   
        <var-name>minlength</var-name>   
        <var-value>8</var-value>   
      </var>   
    </field>   
   
    <!--绿色的为变量名,好像定义也有规则,必须是那样而resource 则是配置是否从资源文件中查找key --> 
      
 
<field property="email" depends="required,email">   
      <arg0 key="tip.email"/>   
    </field>   
   
<!-- 验证年龄在一定范围之内 --> 
    <field property="age" depends="required,intRange">   
      <arg0 key="tip.age"/>   
      <arg1 key="${var:min}" name="intRange" resource="false"/>   
      <arg2 key="${var:max}" name="intRange" resource="false"/>   
       <var>   
         <var-name>min</var-name>   
         <var-value>1</var-value>   
       </var>   
       <var>   
         <var-name>max</var-name>   
         <var-value>100</var-value>   
       </var>   
    </field>   
    </form>   
  </formset>   
</form-validation>  

<form-validation>   <!--以下是配置一些常用的验证规则 -->
  <formset>
<form name="regActionForm"> 
<!--表单名,为验证哪个表单而配置,这里的name指定struts中form-bean的别名 -->
    <field property="username" depends="required">
      <arg0 key="tip.username"/>
    </field>         arg0指要为该规则传入的第一个参数
<!--property为表单中的属性,depends为要验证的规则key为消息资料文件中的配置键 -->
<!-- 验证密码最小长度不小于8位 要一个控件属性验证两个规则的话真正以逗号分开, -->

<field property="userpass" depends="required,minlength">
      <arg0 key="tip.userpass"/>
      <arg1 key="${var:minlength}" name="minlength" resource="false"/>
      <var>
        <var-name>minlength</var-name>
        <var-value>8</var-value>
      </var>
    </field>

    <!--绿色的为变量名,好像定义也有规则,必须是那样而resource 则是配置是否从资源文件中查找key -->
   

<field property="email" depends="required,email">
      <arg0 key="tip.email"/>
    </field>

<!-- 验证年龄在一定范围之内 -->
    <field property="age" depends="required,intRange">
      <arg0 key="tip.age"/>
      <arg1 key="${var:min}" name="intRange" resource="false"/>
      <arg2 key="${var:max}" name="intRange" resource="false"/>
       <var>
         <var-name>min</var-name>
         <var-value>1</var-value>
       </var>
       <var>
         <var-name>max</var-name>
         <var-value>100</var-value>
       </var>
    </field>
    </form>
  </formset>
</form-validation>



4、编写消息资源文件

验证规则的配置文件中所用key的名字为该资源文件所配置

Python代码
# errors.required={0}不能为空.   
# tip.username=用户名   
# tip.userpass=密码   
# errors.minlength={0}不能少于{1}个字符.   
# errors.email={0} 格式不合法.   
# tip.email=邮箱   
# tip.age=年龄   
# errors.range={0} 必须在 {1} - {2} 之间.   
 
errors.required={0}\u4e0d\u80fd\u4e3a\u7a7a.   
tip.username=\u7528\u6237\u540d   
tip.userpass=\u5bc6\u7801   
errors.minlength={0}\u4e0d\u80fd\u5c11\u4e8e{1}\u4e2a\u5b57\u7b26.   
errors.email={0} \u683c\u5f0f\u4e0d\u5408\u6cd5.   
tip.email=\u90ae\u7bb1   
tip.age=\u5e74\u9f84   
errors.range={0} \u5fc5\u987b\u5728 {1} - {2} \u4e4b\u95f4.  

# errors.required={0}不能为空.
# tip.username=用户名
# tip.userpass=密码
# errors.minlength={0}不能少于{1}个字符.
# errors.email={0} 格式不合法.
# tip.email=邮箱
# tip.age=年龄
# errors.range={0} 必须在 {1} - {2} 之间.

errors.required={0}\u4e0d\u80fd\u4e3a\u7a7a.
tip.username=\u7528\u6237\u540d
tip.userpass=\u5bc6\u7801
errors.minlength={0}\u4e0d\u80fd\u5c11\u4e8e{1}\u4e2a\u5b57\u7b26.
errors.email={0} \u683c\u5f0f\u4e0d\u5408\u6cd5.
tip.email=\u90ae\u7bb1
tip.age=\u5e74\u9f84
errors.range={0} \u5fc5\u987b\u5728 {1} - {2} \u4e4b\u95f4.


5.在struts-config.xml中配置Action验证失败跳转页面,属性为input指向的地方

二、手工验证;
1、用户名、密码不能为空;
2、密码长度不能小于8位;

(1)验证代码写在哪儿?
ActionForm的validate()方法中,如果该方法返回的ActionErrors中没有包含错误消息,认为验证通过。

(2)错误集合存在哪儿?
由 RequestProcessor 将错误集合存储在 Request 中,键名为
Globas.ERROR_KEY;

(3)如何显示错误消息?

Html代码
<html:errors/> <!--显示所有消息 --> 
<html:errors property="xx"/> <!--显示指定的消息--> 

<html:errors/> <!--显示所有消息 -->
<html:errors property="xx"/> <!--显示指定的消息-->
三、生成JavaScript
(1)ActionForm继承 org.apache.struts.validator.ValidatorForm;
(2)ActionForm中无 validate() 方法;
(3)表单JSP页中加:
<html:form .... onsubmit="return validateRegForm(this);">颜色字体一致,首字母大写
<html:javascript formName="regForm"/>
(4)在validation.xml中配置验证规则;

另外再说一个不怎么常用的标签,它的作用一般就是方便表单Bean对象的重复代码

Html代码
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>   
<h1>用户注册</h1>   
<html:form action="reg.do" method="post">   
  <nested:nest property="user">     
    用户名:<nested:text property="username"/> 
   
    密码:<nested:text property="userpass"/> 
   
  </nested:nest>   
  <html:submit value="提交"/>   
</html:form>  

<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<h1>用户注册</h1>
<html:form action="reg.do" method="post">
  <nested:nest property="user">  
    用户名:<nested:text property="username"/><br/>
    密码:<nested:text property="userpass"/><br/>
  </nested:nest>
  <html:submit value="提交"/>
</html:form>


要使用该配置,在ActionForm中要实例化一个user对象才可以通过以上配置使用对象中username的属性

Html代码
<hr>   
<h1>用户注册</h1>   
<html:form action="reg.do" method="post">   
    用户名:<html:text property="user.username"/> 
   
    密码:<html:text property="user.userpass"/> 
   
  <html:submit value="提交"/>   
</html:form>  

<hr>
<h1>用户注册</h1>
<html:form action="reg.do" method="post">
    用户名:<html:text property="user.username"/><br/>
    密码:<html:text property="user.userpass"/><br/>
  <html:submit value="提交"/>
</html:form>  上面的代码也可以实现刚才的功能,但是在验证框架中就不能那么使用了

Tiles标签


Html代码
<tiles:insert page="header.jsp" flush="true"/><!--标头内容 --> 

<tiles:insert page="header.jsp" flush="true"/><!--标头内容 -->
作用与嵌套网页,可以定制好一个模板,然后在模板中使用相应的可编辑内容

Html代码
<h1>t1.jsp</h1>   
111111111111111   
<hr>   
<!--page表示所要插入的网页,flush是否及时更新 --> 
<tiles:insert page="footer.jsp" flush="true"/><!--末尾内容 --> 

<h1>t1.jsp</h1>
111111111111111
<hr>
<!--page表示所要插入的网页,flush是否及时更新 -->
<tiles:insert page="footer.jsp" flush="true"/><!--末尾内容 --> 第二种情况是以一个定制了的模板生成个新的网页

Html代码
<tiles:insert attribute="header"/>   
<tiles:insert attribute="footer"/>   
 
<tiles:insert page="template1.jsp" flush="true">   <!--已经存在一个template1.jsp模板 --> 
<tiles:put name="header" value="header.jsp"/>  <!--往属性header设置嵌入页面 --> 
<tiles:put name="footer" value="footer.jsp"/>    <!--往属性footer设置嵌入页面 --> 
</tiles:insert>  

<tiles:insert attribute="header"/>
<tiles:insert attribute="footer"/>

<tiles:insert page="template1.jsp" flush="true">   <!--已经存在一个template1.jsp模板 -->
<tiles:put name="header" value="header.jsp"/>  <!--往属性header设置嵌入页面 -->
<tiles:put name="footer" value="footer.jsp"/>    <!--往属性footer设置嵌入页面 -->
</tiles:insert>

(1)防止重复提交;  Action
原理是通过在请求里面加入一些身份标记,在请求的时候判断是否事先存放的标记,如果不是则是第二次非正常提交

Java代码
this.saveToken(request);        //在第一次点击请求的时候存入然后存转发到另一个JSP页面   
//判断令牌是否有效;   
if(! this.isTokenValid(request) ){     //如果是刚才的页面转发过来的话则它返回真   
saveToken(request);   
return ( new ActionForward(mapping.getInput()) );    
//跳转到Action配置的input中的页面   
}   
//最后正常执行完业务逻辑就把先前存的Token删除   
request.removeAttribute(mapping.getAttribute());   
this.resetToken(request);  

this.saveToken(request);        //在第一次点击请求的时候存入然后存转发到另一个JSP页面
//判断令牌是否有效;
if(! this.isTokenValid(request) ){     //如果是刚才的页面转发过来的话则它返回真
saveToken(request);
return ( new ActionForward(mapping.getInput()) ); 
//跳转到Action配置的input中的页面
}
//最后正常执行完业务逻辑就把先前存的Token删除
request.removeAttribute(mapping.getAttribute());
this.resetToken(request);
(2)动态ActionForm(对应的JAVA类是动态产生的,JAVA类中的属性在struts-config.xml文件中动态配置)
1.配置Struts-config.xml中的 <form-bean/>,在其中声明
表单中要包含的字段元素;
----------------------------------------
例如页面上有以下一个表单 ,分别有属性username userage

Html代码
<form action="dynaReg.do" method="post">   
username:<input size=10 name="username"> 
   
userage:<input size=10 name="userage"> 
   
<input type="submit" value=" OK ">   
</form>  

<form action="dynaReg.do" method="post">
username:<input size=10 name="username"><br>
userage:<input size=10 name="userage"><br>
<input type="submit" value=" OK ">
</form>


那么对应这个表单就要在Struts-config.xml中配置一个与其对应的form-bean

Xml代码
<form-bean name="dynaRegForm" dynamic="true" type="org.apache.struts.action.DynaActionForm"> <!--指定该bean为动态的,并类型是该类   
如果使用了动态FORMBEAN也想用验证框架的话这里的TYPE就要指定DynaValidatorActionForm --> 
        <form-property name="username" type="java.lang.String"/>   
        <form-property name="userage" type="java.lang.Integer" initial="0"/>   
</form-bean>   
   

<form-bean name="dynaRegForm" dynamic="true" type="org.apache.struts.action.DynaActionForm"> <!--指定该bean为动态的,并类型是该类
如果使用了动态FORMBEAN也想用验证框架的话这里的TYPE就要指定DynaValidatorActionForm -->
        <form-property name="username" type="java.lang.String"/>
        <form-property name="userage" type="java.lang.Integer" initial="0"/>
</form-bean>
   ----------------------------------------------------
2.配置Struts-config.xml中的 <action/>,将动态ActionForm
与某个Action结合起来;
只要name属性名称一致就可以了
在Action中的业务方法有些改动,因为它自动生成表单bean,所以取值的时候要像这样取,get中填写xml配置中的属性名字,把form强转换成DynaActionForm类对象,使用.get方法,返回Object,所以相应的再强转成想要的类型
String username=(String)((DynaActionForm)form).get("username");
Integer userage=(Integer)((DynaActionForm)form).get("userage");
3.客户使用表单,表单中名称与<form-bean>中声明的相同;

最后在使用完表单bean之后要删除掉刚才生成的bean;方法如下
request.removeAttribute(mapping.getAttribute());//删除FormBean


(3)DispatchAction类,可以在一个Action中编写多个业务方法;
1、编写Action,要继承DispatchAction,且无execute()方法;
2、在Action类中提供多个业务方法;
3、在表单/超链接中生成请求时,用URL: xxxxx.do?method=XX
4、使用该类,可以节省Action的个数;

测试DispatchAction类(一个Action处理多种业务):
加math.do?method=add
减math.do?method=dec
乘math.do?method=mul

在Action类中要写入相应的方法。

Java代码
public ActionForward add(ActionMapping mapping,   
                            ActionForm form,   
                            HttpServletRequest request,   
                            HttpServletResponse response)   
    throws Exception {   
    System.out.println("add....");   
    request.setAttribute( "mathresult","add...." );   
    return mapping.findForward( "success" );   
    }  

public ActionForward add(ActionMapping mapping,
                            ActionForm form,
                            HttpServletRequest request,
                            HttpServletResponse response)
    throws Exception {
    System.out.println("add....");
    request.setAttribute( "mathresult","add...." );
    return mapping.findForward( "success" );
    } 
其他几个以此类推。。。。。。。。。。。。

(4)一个表单实现多种业务(计算器)----LookupDispatchAction;
LookupDispatchAction(一个表单对应多个处理方法):

1、编写Action,继承LookupDispatchAction类;
2、重写LookupDispatchAction类的getKeyMethodMap(),在该方法内对提交按钮文字“键名”和“业务方法名”进行映射;

Java代码
protected Map getKeyMethodMap(){   
Map map=new HashMap();   
map.put("页面显示的按钮","本类中的业务方法名");   
map.put("button.add ","add");   
return map;   
}  

protected Map getKeyMethodMap(){
Map map=new HashMap();
map.put("页面显示的按钮","本类中的业务方法名");
map.put("button.add ","add");
return map;

3、编写业务方法;

Java代码
//add   
    public ActionForward add(ActionMapping mapping,   
                                 ActionForm form,   
                                 HttpServletRequest request,   
                                 HttpServletResponse response)   
    throws Exception   
    {   
 
        int num1 = ((Math2Form) form).getNum1();   
        int num2 = ((Math2Form) form).getNum2();   
request.setAttribute( "math2Result", ""+(num1+num2) );   
        request.removeAttribute(mapping.getAttribute());   
        return (mapping.findForward("success"));   
    }  

//add
    public ActionForward add(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
    throws Exception
    {

        int num1 = ((Math2Form) form).getNum1();
        int num2 = ((Math2Form) form).getNum2();
request.setAttribute( "math2Result", ""+(num1+num2) );
        request.removeAttribute(mapping.getAttribute());
        return (mapping.findForward("success"));
    } 
4、表单中的提交按钮中,显示文字时使用

Html代码
<bean:message key="xxx"/> 

<bean:message key="xxx"/> 
5、使用该类,可以出现许多避免重复性表单;(如下为前台表单显示的内容)

Html代码
<html:submit property="action">   
<bean:message key="button.add"/>   
</html:submit>  

<html:submit property="action">
<bean:message key="button.add"/>
</html:submit>

(5)ForwardAction

Html代码
<action      
path = "/jsp1"   
type = "org.apache.struts.actions.ForwardAction"   
parameter ="/jsp1.jsp"   
/>   
 
<action      
path = "/jsp1"   
forward="/jsp1.jsp"   
/>  

<action   
path = "/jsp1"
type = "org.apache.struts.actions.ForwardAction"
parameter ="/jsp1.jsp"
/>

<action   
path = "/jsp1"
forward="/jsp1.jsp"
/>



学习中
分享到:
评论
1 楼 caoli1018 2012-04-24  
intRange和你写的一样,但是运行后显示不出来呢

相关推荐

    Validator验证框架.pdf

    ### Validator验证框架详解 #### 一、概述 Validator验证框架是一种强大的工具,它与Struts框架结合使用,用于实现Web应用程序中的数据验证功能。通过使用Validator框架,开发人员可以简化验证逻辑,提高代码的可...

    Struts1的validator验证框架

    ### Struts1的Validator验证框架详解 在Java Web开发领域,Struts1作为一个经典且流行的MVC框架,提供了丰富的功能来构建动态Web应用。其中,Validator框架是Struts1用于客户端和服务端表单验证的强大工具,它能...

    struts validator验证框架项目

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据输入验证。这个项目集成了验证规则,使得开发者能够轻松地确保用户提交的数据符合预期的格式和约束,从而...

    Struts Validator验证框架详细讲解.txt

    ### Struts Validator 验证框架详细讲解 #### 引言 在Java Web开发中,数据验证是确保应用程序安全性和用户体验的重要环节。Struts框架作为早期流行的MVC框架之一,提供了强大的验证机制——Struts Validator,它...

    struts中使用validator验证框架

    Validator框架通过XML配置文件(通常命名为struts-validator.xml或validation.xml)定义验证规则。这些规则包括必填字段、长度限制、数字范围等。例如,你可以为一个用户名字段设定“非空”和“最小长度5”的规则,...

    struts validator验证框架例子

    Struts Validator是一个强大的验证框架,它是Apache Struts项目的一部分,专为Java Web应用程序设计,用于实现数据输入验证。Struts框架本身是一个MVC(模型-视图-控制器)架构,而Validator则是它的一个核心组件,...

    struts1.x使用common-validator验证框架

    此外,Struts1.x的验证框架不仅限于服务器端验证,也可以结合JavaScript进行客户端验证,以提高用户体验。客户端验证可以通过在JSP页面中引入Struts的JavaScript库,然后利用`&lt;html:javascript&gt;`标签生成相应的验证...

    Struts的Validator验证框架使用教程

    Struts的Validator验证框架是Java Web开发中常用的一个组件,主要用于处理用户输入的数据验证。它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性...

    Struts validator验证框架

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据验证。这个框架帮助开发者在用户提交表单时确保输入的数据是合法、完整且符合业务规则的,从而提高应用...

    validator独立框架验证小例子

    Apache Commons Validator就是这样一个强大的验证框架,它为Java应用程序提供了灵活且可扩展的数据验证功能。本篇文章将深入探讨Apache Commons Validator框架,并通过一个简单的小例子来演示其使用方法。 Apache ...

    validator验证框架的简单使用(struts)

    Validator框架是Struts的一个重要组件,用于进行数据验证,确保用户提交的数据符合预设的规则。在本教程中,我们将深入探讨如何在Struts应用中简单使用Validator框架,主要关注`validator.xml`配置文件的使用。 ...

    jquery validator js验证框架

    **jQuery Validator JS验证框架** jQuery Validator是一个强大的JavaScript库,它为HTML表单提供了方便而灵活的验证功能。这个框架基于jQuery库,使得在网页中实现客户端验证变得简单易行。通过使用jQuery ...

    struts 的validator框架验证

    Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...

    validator框架的应用

    1. **配置Validator插件**:在Struts的配置文件(如struts-config.xml)中,你需要启用Validator插件,并指定验证规则的配置文件路径。 2. **编写验证规则**:在XML配置文件(如validation.xml)中,定义每个表单...

    Validator验证架框api

    `Validator`是一个强大的验证框架,广泛应用于Java开发中,它为开发者提供了丰富的验证规则和便捷的API,使得数据验证过程更加高效和规范。在本文中,我们将深入探讨`Validator`框架的基本概念、核心功能以及如何在...

    struts1.x validator框架验证入门例子

    Validator框架是Struts1.x的一个重要组成部分,主要用于处理客户端和服务器端的数据验证。在这个入门例子中,我们将深入理解Validator框架的基本概念、配置以及如何在实际项目中应用。 一、Validator框架简介 ...

    validator框架客户端验证代码

    Validator框架就是Java中用于进行对象校验的一个强大的工具,尤其在处理复杂的业务逻辑时,其客户端验证功能可以极大地提高开发效率和代码质量。本压缩包提供的"validator框架客户端验证代码"正是为了实现这一目的。...

    validator验证原代码

    `validator`是一个在Java开发中常用的验证框架,用于对输入数据进行校验,确保数据的完整性和准确性。在本文中,我们将深入探讨`validator`验证原代码的核心概念、工作原理以及如何在实际项目中应用。 `Validator`...

    struts_注册验证_Validator框架

    首先,Struts Validator框架基于XML配置文件,这些文件定义了验证规则,如必填字段、电子邮件格式检查、长度限制等。在描述中提到的"作业6_注册验证(Validator框架)"可能包含了一个具体的例子,展示了如何创建这些...

Global site tag (gtag.js) - Google Analytics