Struts2学习笔记(六)校验框架
来源:互联网 发布:康奈尔大学学费知乎 编辑:程序博客网 时间:2024/05/22 06:24
Struts2的校验框架,是一个有效的xml文件。
接下来,我们对之前的register.jsp中的输入字段,使用校验框架来进行验证。
定义校验文件
我们在RegisterAction类所在的包下新建一个RegisterAction-validation.xml文件。首先,加载xwork的dtd文件。具体内容如下所示。
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
那我们加载的xwork-validator-1.0.2.dtd文件中都包含什么内容呢?我们具体来分析一下。
dtd文件的语法
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
声明一个元素
在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:
<!ELEMENT 元素名称 类别>
声明只出现一次的元素
<!ELEMENT 元素名称 (子元素名称)>
声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>
属性声明使用下列语法:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
以下是属性类型的选项:
默认值参数可使用下列值:
详细内容见:http://www.w3school.com.cn/dtd/index.asp
xwork-validator-1.0.2.dtd内容分析
<?xml version="1.0" encoding="UTF-8"?><!-- XWork Validators DTD. Used the following DOCTYPE. <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">--><!ELEMENT validators (field|validator)+>//元素validators中可以包含一到多个field或validator元素<!ELEMENT field (field-validator+)>//field中至少包含一个field-validator元素<!ATTLIST field //field属性name是必须的,类型是字符串name CDATA #REQUIRED><!ELEMENT field-validator (param*, message)>//元素field-validator包含零个或多个param、每个param之后必须有一个message属元素(如果有param,必须在message之前)<!ATTLIST field-validator //field-validator有两个属性值,第一个是type必须存在,第二个属性是short-circuit,值为true或者false。默认值为falsetype CDATA #REQUIRED short-circuit (true|false) "false"><!ELEMENT validator (param*, message)>//元素validator包含零个或多个param、每个param之后必须有一个message属元素(如果有param,必须在message之前)<!ATTLIST validatortype CDATA #REQUIRED //同上 short-circuit (true|false) "false"><!ELEMENT param (#PCDATA)> //表示只有 PCDATA 的元素,PCDATA表示会被解析的字符,比如param代表年龄,<param name='age'>18</param>那么这个18会被解析为整型<!ATTLIST param name CDATA #REQUIRED //param中的属性name必须存在,且是字符型><!ELEMENT message (#PCDATA)> <!ATTLIST message //message中有key属性,可选,key代表国际化信息的表示。 key CDATA #IMPLIED>
分析完dtd文件,我们就清楚了xml文件中为什么要这样写。通过对validator.dtd文件的分析。我们看到校验框架可能存在的两种情况
<!ELEMENT validators (field|validator)+>
一种是字段优先校验
另一种是校验器优先校验
1、字段优先校验
在xml文件配置完成校验,最根本的还是通过配置获得的参数进行代码校验,而代码校验就封装在xwork2.validator.validators的包下。
通过学习default.xml文件,我们可以了解到type有哪些对应的值,分别用于什么样的校验,对应的校验是由哪个类来实现的。而param所对应的值则来源于这些类。
效验RegisterAction-validator.xml文件内容如下所示:
校验的功能如下:
1、username字符在4和6之间
2、password字符在4和6之间
3、repassword等于password
4、age在10和50之间
5、birthday在2000-1-1和2015-1-1之间
5、graduate日期在birthday之后
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><validators><field name="username"><!-- name属性值对应的是需要校验RegisterAction的变量名 --><field-validator type="requiredstring"><!--对username进行何种校验 --><message>username can't be blank</message><!-- 当校验失败时,需要给用户提供什么样的错误提示 --></field-validator><field-validator type="stringlength"><!--字符长度校验 --><param name="minLength">4</param><param name="maxLength">6</param><message>length should be between ${minLength} and ${maxLength}</message></field-validator></field><field name="password"><field-validator type="requiredstring"><!--对username进行何种校验 --><message>password can't be blank</message><!-- 当校验失败时,需要给用户提供什么样的错误提示 --></field-validator><field-validator type="stringlength"><!--字符长度校验 --><param name="minLength">4</param><param name="maxLength">6</param><message>length should be between ${minLength} and ${maxLength}</message></field-validator></field><field name="repassword"><field-validator type="requiredstring"><message>param can't be blank</message></field-validator><field-validator type="fieldexpression"><param name="expression"><![CDATA[(repassword==password)]]></param><message>password should be equal to repassword</message></field-validator></field><field name="age"><field-validator type="required"><message>age can't be blank</message></field-validator><field-validator type="int"><param name="min">10</param><param name="max">50</param><message>age should be between ${min} and ${max}</message></field-validator></field><field name="birthday"><field-validator type="required"><message>birthday can't be blank</message></field-validator><field-validator type="date"><param name="min">2000-1-1</param><param name="max">2015-1-1</param><message>birthday should be between ${min} and ${max}</message></field-validator></field><field name="graduate"><field-validator type="required"><message>graduate can't be blank</message></field-validator><field-validator type="date"><param name="min">2000-1-1</param><param name="max">2015-1-1</param><message>graduate should be between ${min} and ${max}</message></field-validator><field-validator type="fieldexpression"><param name="expression"><![CDATA[(graduate>birthday)]]></param><message>graduate should be after birthday </message></field-validator></field></validators>
2、校验器效验
<validators><validator type="requiredstring"><param name="fieldName">username</param><message>username can't be blank</message></validator><validator type="stringlength"><param name="fieldName">username</param><param name="minLength">4</param><param name="maxLength">6</param><message>username should be between 4 and 6</message></validator><validator type="requiedstring"><param name="fieldName">password</param><message>password can't be blank</message></validator><validator type="stringlength"><param name="fieldName">password</param><param name="mixLength">4</param><param name="maxLength">6</param><message>password should be between 4 and 6</message></validator></validators>
校验执行的先后顺序:
1)首先执行校验框架
2)然后执行自定义的校验框架(validateMyExecute)
3)执行action类中validate方法。
- Struts2学习笔记(六)校验框架
- Struts2 校验框架学习笔记
- Struts2 校验框架学习笔记
- Struts2 校验框架学习笔记
- Struts2 校验框架学习笔记
- struts2校验框架学习笔记
- struts2学习笔记(六)——校验器
- struts2学习笔记(7)——validate校验框架
- struts2学习笔记(四)基于xml的框架校验
- Struts2学习笔记9:Struts2的校验框架
- Struts2学习笔记(六)
- Struts2学习笔记(三) 输入校验
- Struts2系统学习(15)Struts2校验框架基本原理分析
- Struts2学习笔记六
- 输入校验---struts2学习笔记
- struts2学习笔记----校验配置
- Struts2学习笔记----输入校验
- struts2学习笔记(九)struts2内置校验
- 基于Hexo 框架的 静态博客搭建
- POJ 2586 Y2K Accounting Bug
- 让邮件飞一会儿
- 对于一个文件夹中的所有txt文件进行遍历的程序
- 使用corncernStone,Log时间过长解决方法
- Struts2学习笔记(六)校验框架
- Android 调试 自测工具01 (Hugo 、Timber 、Scalpel )
- list排序
- 【MFC】CString的一点tips
- Android--多线程之Handler
- 20个代码生成框架
- <!DOCTYPE html>声明
- trim 函数c实现
- JAX-RS开发(三):ajax访问REST服务时的跨域问题以及jsonp解决方案