验证框架的基本使用
- 验证开发框架类似于jQuery的开发框架的结构,只需要通过一些固定的配置就可以实现数据的验证处理.
之前实现的验证使用的都是validate()方法完成的,这个方法使用的是硬编码实现的,发现不适合实际的数据验证.
而对于验证框架,本质上的实现于validate()是相同的,唯一的区别在于,验证框架使用了配置文件的方式完成验证,而不再使用因编码的处理形式.
-
如果进行验证框架的使用,那么必须要有一个具体的验证框架执行结构文件.
- 验证文件是需要与某一个具体的Action捆绑在一起的,所以首先需要建立一个:Action类名称-validation.xml文件
- 这个文件保存在于Action类同样的包中
- 对于此验证文件必须有合适的DTD文档声明
-
编写NewsAction-validation.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!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="news.nid"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻id必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
</field>
<field name="news.title"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻标题必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
</field>
<field name="news.price"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻价格必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
</field>
<field name="news.pubDate"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻发布时间必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
</field>
</validators>
- 页面中错误信息的集合还是 “allFieldErrors” ,使用EL表达式取出错误集合信息
<form action="<%= addUrl%>" method="post">
新闻id:<input type="text" name="news.nid" id="news.nid" value="1"/><span> ${FieldErrors['news.nid'][0]}</span><br/>
新闻标题:<input type="text" name="news.title" id="news.title" value="世界和平"/><span> ${FieldErrors['news.title'][0]}</span><br/>
新闻价格:<input type="text" name="news.price" id="news.price" value="4500.4"/><span> ${FieldErrors['news.price'][0]}</span><br/>
发布日期:<input type="text" name="news.pubDate" id="news.pubDate" value="2018-08-11"/><span> ${FieldErrors['news.pubDate'][0]}</span><br/>
<input type="submit" value="添加"/>
</form>
- 效果
- struts2的验证框架和jQuery验证框架都是使用固定的方式实现相关的验证规则.
常用的验证配置
在之前只是进行了简单的数据是否为空验证,那么实际上也可以实现更多的验证规则
-
修改验证规则
-
int校检器
-
新闻标号不允许为空,并且设置其长度数值范围.
<field name="news.nid"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻id必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
<field-validator type="int"><!-- 字符串长度-->
<param name="min">4</param>
<param name="max">10</param>
<message>新闻id必须在${min}到${max}之间</message>
</field-validator>
</field>
- 设置新闻标题的验证规则
- 字符串校检器
<field name="news.title"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻标题必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
<field-validator type="stringlength">
<param name="minLength">10</param>
<param name="maxLength">20</param>
<message>新闻标题必须在${minLength}到${maxLength}之间</message>
</field-validator>
</field>
- 设置新闻价格的验证:
- double 校检器
<field name="news.price"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻价格必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
<field-validator type="double">
<param name="minExclusive">10.5</param>
<param name="maxExclusive">5000.5</param>
<message>新闻价格必须在${minExclusive}到${maxExclusive}之间</message>
</field-validator>
</field>
- 设置日期验证
<field name="news.pubDate"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻发布时间必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
<field-validator type="date">
<param name="min">2019-02-18</param>
<param name="max">2019-02-20</param>
<message>日期新闻必须在${min}到${max}之间</message>
</field-validator>
</field>
正则校检器
- 对于验证操作,还可以使用正则完成,例如:在新闻标题中添加正则验证
</field>
<field name="news.title"><!-- name 描述字段-->
<field-validator type="required"><!-- type="required"描述该字段必须存在-->
<message>[验证框架]新闻标题必须存在</message> <!-- message 元素描述验证失败的提示信息-->
</field-validator>
<field-validator type="regex">
<param name="trim">true</param>
<param name="RegexExpression"><![CDATA[\w+@\w\.\w+]]></param>
<message>请填写正确的邮箱格式</message>
</field-validator>
</field>
- 不同版本的struts2 使用正则校检器方式不同
对于验证框架而言,本质上和validate()方法没有区别,依然都是在数据接收之后进行的验证处理,即使验证出错了,后台还是会一直在报错.
- 错误类型提示信息
- 例如:应该接收的是int型的数据,可是用户传递了错误的字符串,则错误的提示信息为以下内容
- 为了防止这种错误的提示信息,需要在资源文件中添加对应字段的提示信息
- 例如在Messages.properties文件中添加如下内容
invalid.fieldvalue.news.nid=新闻id必须是数字
invalid.fieldvalue.news.title=新闻标题必须是字符串
invalid.fieldvalue.news.price=新闻标题必须是数字
invalid.fieldvalue.news.pubDate=请输入正确的日期格式如"yyy-mm-dd"
- 其中key开头的"invalid.fieldvalue."是固定的格式,后面的为具体的字段名称
- 修改之后的效果