【原创】Struts1.x系列教程(11):Validator验证框架高级应用

本文为原创,如需转载,请注明作者和出处,谢谢!

Struts2教程4:使用validate方法验证数据

Struts2教程5:使用Validation框架验证数据

    《Struts1.x系列教程(10):Validator验证框架入门》一文中给出的例子中的nameageemail都是简单的属性,如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类),可以使用圆点(.)符号来访问。如我们可以通过设置元素的property属性值为“employee.salary”来验证employee属性中的salary属性。
    如果要验证的索引属性,我们可以使用元素的indexedListProperty属性来指定这个索引属性,如下面代码如示:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    < field  indexedListProperty ="items"  depends = >    field >

    Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    < field  indexedListProperty ="items"   property ="employee.age"   depends = >    field >

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

    Validator框架将根据上述的配置代码来验证items属性中的每一项的employee.age属性。

二、使用常量和变量

1. 常量

    《Struts1.x系列教程(10):Validator验证框架入门》一文中的name属性使用了mask进行验证。这个mask实际上代表了一个正则表达式。但如果在validator.xml文件中有很多个地方需要用到这个正则表达式,那就它就会在很多地方重复。为此,我们可以使用常量来避免这种事情发生。   

常量分为全局常量和局部常量。

1)全局常量

全局常量可以被用在validator.xml中定义的所有form中。我们可以使用元素来配置全局常量。为了配置全局常量,将如下的内容放到第一个元素的前面。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    < global >
      
< constant >
          
< constant-name > mask constant-name >
          
< constant-value >  ^[a-zA-Z0-9]*$  constant-value >
      
constant >
  
global >
  
< formset >

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4     局部常量需要放到元素的开始位置(根据DTD的定义,局部常量只能放到这里,而全局常量可以放在第一个元素的前面,也可以放到的后面)。如下面的代码所示:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    < formset >
      
< constant >
          
< constant-name > mask constant-name >
          
< constant-value >  ^[a-zA-Z0-9]*$  constant-value >
      
constant >
      
< form  name ="firstValidatorForm" >  
       
  
formset >

 我们可以编写如下的代码来使用mask常量:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt < var >
    < var-name > mask var-name >
    < var-value >  ${mask} var-value >
var >

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4
2. 变量
    Validator框架通过元素来定义变量。变量将作为的子元素被使用。主要向depends属性值 (如mask)以及的错误信息传递数据。如下面的代码通过变量required将“姓名”传递给了错误信息的第一个参数{0}。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt < field  property ="name"   depends ="required " >
    < msg  name ="required"  key ="error.name.blank"   />
    < arg  name ="required"  key ="${var:required}"  position ="0"  resource ="false"   />
    < var >
        < var-name > required var-name >
       
< var-value > 姓名 var-value >
   
var >
field >

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

三、客户端验证

 使用Validator框架的好处之一就是可以很容易地将服务端验证变为客户端验证(JavaScript验证)。为了完成这一转换,我们只需要修改两个地方。现在就拿《Struts1.x系列教程(10):Validator验证框架入门》中的firstValidator.jsp为例来说明要修改什么。
    首先,在firstValidator.jsp中的任何地方(当然,任何地方指的是客户端代码区,并不包括和所包含的内容)添加如下的标签:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt    < html:javascript  formName ="firstValidatorForm" />

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 标签中加入如下的属性:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt   onsubmit = " return validateFirstValidatorForm(this); "
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

    现在再运行firstValidator.jsp,如果输入错误,IE就会直接弹出错误信息对话框。我们查看客户端源代码就会发现,在源代码中多了很多JavaScript代码。实际上,当加入标签后,在运行JSP页面时,Servlet引擎就会将Validator框架中JavaScript版本的预定义验证代码连同HTML代码都发送到客户端。这些JavaScript代码中有一个入口函数,这个函数的名称前缀为validate,后面是首字母大写的Form名。在标签中的onsubmit事件中调用这个入口函数就可以通过JavaScript代码来验证客户端录入的数据了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12921506/viewspace-555290/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12921506/viewspace-555290/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值