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

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!上一篇:Struts1.x系列教程(10):Validator验证框架入门 Struts2教程4:使用validate方法验证数据 Struts2教程5:使用Validation框架验证数据     在《Struts1.x系列教程(10):Validator验证框架入门》一文中给出的例子中的name、age和email都是简单的属性,如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类),可以使用圆点(.)符号来访问。
《Struts1.x系列教程(10):Validator验证框架入门》 一文中 给出的例子中的name age email 都是简单的属性,如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类),可以使用圆点(.) 符号来访问。如我们可以通过设置 元素的property 属性值为“employee.salary ”来验证employee 属性中的salary 属性。
    如果要验证的索引属性,我们可以使用元素的indexedListProperty属性来指定这个索引属性,如下面代码如示:
   < field  indexedListProperty ="items"  depends = >    </ field >

    在使用上述配置代码后,Validator框架将会按着depends属性中的约束来验证items属性的每一个值。我们还可以将property和indexedListProperty配合使用,如下面代码所示:
   < field  indexedListProperty ="items"   property ="employee.age"   depends = >    </ field >

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

二、使用常量和变量

1. 常量

    一文中的name属性使用了mask进行验证。这个mask实际上代表了一个正则表达式。但如果在validator.xml文件中有很多个地方需要用到这个正则表达式,那就它就会在很多地方重复。为此,我们可以使用常量来避免这种事情发生。   

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

1)全局常量

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

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

(2)局部常量
    局部常量需要放到元素的开始位置(根据DTD的定义,局部常量只能放到这里,而全局常量可以放在第一个元素的前面,也可以放到的后面)。如下面的代码所示:
   < formset >
      
< constant >
          
< constant-name > mask </ constant-name >
          
< constant-value >  ^[a-zA-Z0-9]*$  </ constant-value >
      
</ constant >
      
< form  name ="firstValidatorForm" >  
       
  
</ formset >

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

< var >
    < var-name > mask </ var-name >
    < var-value >  ${mask} </ var-value >
</ var >


2. 变量

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

三、客户端验证

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

   < html:javascript  formName ="firstValidatorForm" />

然后在标签中加入如下的属性:
  onsubmit = " return validateFirstValidatorForm(this); "

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

目录
相关文章
|
存储 缓存 弹性计算
|
10月前
|
算法 Linux 开发者
Linux内核中的锁机制:保障并发控制的艺术####
本文深入探讨了Linux操作系统内核中实现的多种锁机制,包括自旋锁、互斥锁、读写锁等,旨在揭示这些同步原语如何高效地解决资源竞争问题,保证系统的稳定性和性能。通过分析不同锁机制的工作原理及应用场景,本文为开发者提供了在高并发环境下进行有效并发控制的实用指南。 ####
|
SQL 运维 关系型数据库
小表驱动大表|学习笔记
快速学习小表驱动大表
631 0
|
JSON 自然语言处理 搜索推荐
人机协同翻译平台:Alynx阿里翻译旗下智能协同翻译平台
Alynx是阿里翻译旗下智能协同翻译平台,致力于为有自主人工翻译需求的用户提供高效管理翻译项目的平台,赋能用户快速完成翻译需求。
|
数据建模 数据处理 Python
python 线性回归模型预测国民GDP值
python 线性回归模型预测国民GDP值
1104 0
python 线性回归模型预测国民GDP值
|
机器学习/深度学习 人工智能 编解码
最新更新的 CVPR 2022 论文66篇
以下是最新更新的 CVPR 2022 论文,包括的研究方向有:目标检测、预训练语言模型、Transformer、图像修复、模型训练、视觉语言表征学习、对比学习、深度估计、语义分割、动作检测、人脸防伪、长尾识别、神经网络架构设计、异常检测、三维视觉、姿态估计、机器人等66篇最新录用论文信息。● 论文摘要:提出了一种新的无监督活动分割方法,它使用视频帧聚类作为前置任务,同时执行表示学习和在线聚类。这与通常按顺序执行表示学习和聚类的先前工作形成对比。作者通过采用时间最优传输来利用视频中的时间信息,将保留活动时间顺
706 0
|
运维 负载均衡 Cloud Native
「读写分离」RDS PostgreSQL数据库代理发布,助力降本增效
基于MaxScale的RDS数据库代理服务能够帮助客户实现数据库的读写分离架构,以低成本实现应用横向扩展能力。
1049 0
「读写分离」RDS PostgreSQL数据库代理发布,助力降本增效
|
移动开发 Oracle Java
《钉钉应用开发者速成手册》之“API实战——同步打卡数据”
本教程指导你如何调用创建一个H5微应用,然后使用这个应用获取用户打卡结果。
2267 0
《钉钉应用开发者速成手册》之“API实战——同步打卡数据”
|
前端开发 搜索推荐 NoSQL
Spring Boot 2.6.0 重磅发布,全面解析看过来!
Spring Boot 2.6.0 重磅发布,全面解析看过来!
768 0
Spring Boot 2.6.0 重磅发布,全面解析看过来!

热门文章

最新文章