博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写校验规则文件
阅读量:6000 次
发布时间:2019-06-20

本文共 3995 字,大约阅读时间需要 13 分钟。

Struts 2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts 2的验证框架将会负责进行服务器校验和客户端校验。

下面应用将会示范如何利用Struts 2的校验框架进行输入校验。使用Struts 2的校验框架进行校验无须对程序代码进行任何改变,只需编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎样的规则。

本应用所使用的表单代码如下。

程序清单:codes\04\4.2\basicValidate\regist.jsp

<s:form action="regist">

     <s:textfield name="name" label="用户名"/>

     <s:textfield name="pass" label="密码"/>

     <s:textfield name="age" label="年龄"/>

     <s:textfield name="birth" label="生日"/>

     <s:submit value="注册"/>

</s:form>

上面粗体字代码定义了4个表单域,这4个表单域分别对应namepassagebirth 4个请求参数,假设本应用要求这4个请求参数满足如下规则:

Ø  namepass只能是字母和数组,且长度必须在425之间。

Ø  年龄必须是1150之间的整数。

Ø  生日必须在1900-01-012050-02-21之间。

下面是该请求对应的Action代码。

程序清单:codes\04\4.2\basicValidate\WEB-INF\src\org\crazyit\app\action\RegistAction.java

public class RegistAction extends ActionSupport

{

     //该请求包含的4个请求参数

     private String name;

     private String pass;

     private int age;

     private Date birth;

     //此处省略了4个属性的settergetter方法

     ...

}

在上面的Action中,我们仅提供了4个属性来封装用户的请求参数,并为这4个参数提供了对应的settergetter方法。该Action继承了ActionSupport类,因此它也包含了一个execute方法,且该方法直接返回success字符串,这个Action不具备任何输入校验的功能。

但通过为该Action指定一个校验规则文件后,即可利用Struts 2的输入校验功能对该Action进行校验。下面是本应用所使用的输入校验文件。

程序清单:codes\04\4.2\basicValidate\WEB-INF\src\org\crazyit\app\action\RegistAction-validation.xml

<?xml version="1.0" encoding="GBK"?>

<!-- 指定校验配置文件的DTD信息 -->

<!DOCTYPE validators PUBLIC

     "-//OpenSymphony Group//XWork Validator 1.0.3//EN"

     "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

<!-- 校验文件的根元素 -->

<validators>

     <!-- 校验Actionname属性 -->

     <field name="name">

          <!-- 指定name属性必须满足必填规则 -->

          <field-validator type="requiredstring">

               <param name="trim">true</param>

               <message>必须输入名字</message>

          </field-validator>

          <!-- 指定name属性必须匹配正则表达式 -->

          <field-validator type="regex">

               <param name="expression"><![CDATA[(\w{4,25})]]></param>

               <message>您输入的用户名只能是字母和数字

                    ,且长度必须在425之间</message>

          </field-validator>

     </field>

     <!-- 校验Actionpass属性 -->

     <field name="pass">

          <!-- 指定pass属性必须满足必填规则 -->

          <field-validator type="requiredstring">

               <param name="trim">true</param>

               <message>必须输入密码</message>

          </field-validator>

          <!-- 指定pass属性必须满足匹配指定的正则表达式 -->

          <field-validator type="regex">

               <param name="expression"><![CDATA[(\w{4,25})]]></param>

               <message>您输入的密码只能是字母和数字

                    ,且长度必须在425之间</message>

          </field-validator>

     </field>

     <!-- 指定age属性必须在指定范围内-->

     <field name="age">

          <field-validator type="int">

               <param name="min">1</param>

               <param name="max">150</param>

               <message>年纪必须在1150之间</message>

          </field-validator>

     </field>

     <!-- 指定birth属性必须在指定范围内-->

     <field name="birth">

          <field-validator type="date">

               <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->

               <param name="min">1900-01-01</param>

               <param name="max">2050-02-21</param>

               <message>生日必须在${min}${max}之间</message>

          </field-validator>

     </field>

</validators>

校验规则文件的根元素是<validators.../>元素,<validators.../>元素可包含多个<field.../><validator.../>元素,它们都用于配置校验规则,区别是:<field-validator.../>是字段校验器的配置风格,而<validator.../>是非字段校验器的配置风格。关于这两个元素配置方式后面还有更详细的介绍。

Struts 2的校验文件规则与Struts 1的校验文件设计方式不同,Struts 2中每个Action都有一个校验文件,因此该文件的文件名应该遵守如下规则:

<Action名字>-validation.xml

前面的Action名是可以改变的,后面的-validation.xml部分总是固定的,且该文件应该被保存在与Action class文件相同的路径下。例如,本应用的Action class文件保存在WEB-INF/classes/org/crazyit/ app/action路径下,故该校验文件也应该保存在该路径下。

与类型转换失败相似的是,当输入校验失败后,Struts 2也是自动返回名为“input”的Result,因此需要在struts.xml文件中配置名为“input”的Result。下面是本应用的struts.xml文件中Action的配置片段。

程序清单:codes\04\4.2\basicValidate\WEB-INF\src\struts.xml

<!-- 用户注册的Action -->

<action name="regist" class="org.crazyit.app.action.RegistAction">

     <!-- 类型转换失败、输入校验失败,转入该页面 -->

     <result name="input">/regist.jsp</result>

     <result>/show.jsp</result>

</action>

增加了上面的修改之后,这样就为该Action对应的各字段添加了校验规则,而且指定了校验失败后应用会跳转到regist.jsp页面,接下来可以在regist.jsp页面中添加<s:fielderror/>来输出错误提示。

剩下部分无须任何修改,系统自动会加载该文件,当用户提交请求时,Struts 2的校验框架会根据该文件对用户请求进行校验。如果浏览者的输入不满足校验规则,将可以看到如图4.12所示的界面。

 

4.12  使用校验框架的效果

从图4.12中可以看出,这种基于Struts 2校验框架的校验方式完全可以替代手动校验,而且这种校验方式的可重用性非常高,只需要在配置文件中配置校验规则,即可完成数据校验,无须用户书写任何的数据校验代码。

 

 

 

类型转换失败的提示信息、输入校验失败的提示信息都被封装成
FieldError
,并被放入
Action Context
中,而且校验失败时都将返回
input
逻辑视图名,且都使用
<s:fielderror/>
标签来输出错误提示信息。如果开发者使用了
Struts 2
的表单标签来生成表单,那么表单标签会自动输出错误提示,如图
4.12
所示。

 

提示:

转载地址:http://upwmx.baihongyu.com/

你可能感兴趣的文章
如何解决高并发和大流量
查看>>
代码面试需要知道的8种数据结构(附面试题及答案链接)
查看>>
Kubernetes里的ConfigMap的用途
查看>>
React 点击删除列表中对应项(React 获取DOM中自定义属性)
查看>>
Java Class文件结构解析
查看>>
VMware虚拟机安装CentOS 7并搭建Lamp服务器环境
查看>>
TCP/IP详解 卷1 第十八章 TCP的建立与终止
查看>>
浅谈String模块ascii_letters和digits
查看>>
Java中用双缓冲技术消除闪烁
查看>>
MISC总结——隐写术(一)
查看>>
AI学习笔记——强化学习之动态规划(Dynamic Programming)解决MDP(1)
查看>>
2018 年春节总结
查看>>
servlet 具体实现
查看>>
iOS 详细介绍 GCD
查看>>
Linux下实现定时执行程序--crontab
查看>>
宜信开源专注业务逻辑的轻量级服务框架 nextsystem4
查看>>
Linux下MySQL的安装
查看>>
重回独立,SUSE 成全球最大独立开源公司
查看>>
1400 小时数据,Common Voice 成最大开源人类语音数据集
查看>>
mvp架构优化
查看>>