在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入。在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入。使用单独的XML验证文件让您可以内置到Struts 2框架的验证器。

贴个本帖的地址,以免被爬:struts2官方 中文教程 系列十一:使用XML进行表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6938720.html

下载本章代码

为了使用户能够编辑存储在Person对象中的信息,我们要有这样的表单,上节教程中以搭建好了环境:

使用XML验证

要验证用户的表单字段输入值,可以使用包含验证规则的单独XML文件。包含验证规则的XML文件必须被命名为  ActionClassName-validation.xml。在示例应用程序中,XML验证文件被命名为 EditAction-validation.xml(src/action)

struts2提供了几种不同的验证器可供我们在xml文件中使用。参考 Validation ,可以获得可使用的验证器列表。

在上面的表单中,我们希望确保用户输入的姓氏为字符串而非数字。为了让Struts 2框架执行该规则,我们可以使用Struts2 requiredstring 验证器。这个验证器检查用户在表单字段中是否输入了一个字符串值。

XML验证器的格式

在XML验证文件中(对于这个例子,就是EditAction-validation.xml):

 <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

 <validators>
<validator type="requiredstring">
<param name="fieldname">personBean.firstName</param>
<message>First name is required.</message>
</validator>
</validators>

在validators节点中,您可以拥有一个或多个这样的节点。type属性指定了您想要使用的Struts 2框架的哪个验证器(请参阅Validation)。param name=“fieldname”节点用于告诉框架,该框架将用于将规则应用于哪个字段(这里是personBean.firstName)。如果忘了可以看下edit.jsp中form标签中的各个字段的name属性的值,当然在edit.jsp中,key属性代替了name属性,不过这并没用什么影响(如果您不熟悉如何使用Struts 2 Form标签的话,请查看上一节教程)。message节点用于告诉框架,如果验证失败,将显示哪些消息。

在验证XML文件中编写XML的方法有很多。请参阅Struts 2文档中的  Validation  ,以获得完整的讨论。

例如,如果用户没有在姓氏字段中输入值并单击提交按钮,那么他将看到下面的内容:

为了达到以上效果,修改了struts.xml,index.jsp,我想根据前面的教程,大家是可以很容易看出来的。

验证电子邮件

如何值不为空的话,将会验证是否是合法的电子邮件地址

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
<validator type="requiredstring">
<param name="fieldname">personBean.firstName</param>
<message>姓氏是必须的</message>
</validator> <!-- 验证电子邮件 -->
<validator type="email">
<param name="fieldname">personBean.email</param>
<message>电子邮件地址格式不正确</message>
</validator>
</validators>

使用正则表达式验证用户的输入

Struts 2框架通过使用regex验证器提供了一种强大的方式来验证用户的表单字段输入。在示例应用程序中,我们希望确保用户以999-999-9999的格式输入电话号码。我们可以使用正则表达式和正则表达式验证器来执行此规则。

<validator type="requiredstring">
<param name="fieldname">personBean.phoneNumber</param>
<message>Phone number is required.</message>
</validator>
<validator type="regex">
<param name="fieldname">personBean.phoneNumber</param>
<param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
<message>Phone number must be entered as 999-999-9999.</message>
</validator>

注意,正则表达式是如何包含在CDATA区域中的。

使用OGNL表达式验证用户的输入

在示例应用程序中,我们希望确保用户至少选中了一个汽车模型复选框。为了执行这一规则,我们可以使用fieldexvalidator验证器。

<validator type="fieldexpression">
<param name="fieldname">personBean.carModel</param>
<param name="expression"><![CDATA[personBean.carModel.length > 0]]></param>
<message>You must select at least one car model.</message>
</validator>

param name="expression"节点包含一个OGNL表达式,该表达式求值为true或false。我们之前没有讨论过OGNL,它表示对象图导航语言(请参阅http://www.opensymphony.com/ognl/和OGNL)。OGNL表达式可以由Struts 2框架作为Java语句进行解析。

在上面的XML中,param name="expression"节点的值,personBean.carModel.length > 0,将被框架作为Java语句进行解析。personBean.carModel告诉框架调用类Person的getcarmodel方法。该方法返回一个数组。因为数组有一个长度属性,所以这个框架将得到getcarmodel方法返回的数组的长度属性的值

如果用户没有选中任何一个复选框,那么getCarModel方法返回的数组的长度值为0。因为完整的OGNL表达式只有在长度值大于0的情况下才会计算为true,所以验证失败。用户将看到这一点。当对用户的输入进行条件验证时,字段验证验证器非常有用。如果OGNL表达式不计算为true,那么用户的输入将不被接受。

总结

Struts 2框架提供了易于使用的验证方法。您可以向Action类添加一个验证方法,或者使用验证规则的单独的XML文件,或者使用两种方法的组合。

struts2官方 中文教程 系列十一:使用XML进行表单验证的更多相关文章

  1. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  2. struts2官方 中文教程 系列十:Form标签

    介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...

  3. struts2官方 中文教程 系列九:Debugging Struts

    介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...

  4. struts2官方 中文教程 系列八:异常处理

    在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...

  5. struts2官方 中文教程 系列七:消息资源文件

    介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...

  6. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  7. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  8. struts2官方 中文教程 系列六:表单验证

    先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介 ...

  9. struts2官方 中文教程 系列五:处理表单

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单  即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...

随机推荐

  1. Git 版本管理器学习笔记

    难点:使用 git revert <commit_id> 操作实现以退为进, git revert 不同于 git reset 它不会擦除"回退"之后的 commit_ ...

  2. 基于Qt的相似QQ好友列表抽屉效果的实现

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

  3. leetcode第一刷_Plus One

    这种相似大整数的处理的问题还是比較常见的,这道题应该是很easy的版本号. 题目的要求是这种,输入的vector靠前的位置是数字的高位.因此应该先求出长度.然后从后面往前算.维护一个变量保存进位.这我 ...

  4. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  5. 【[SCOI2007]蜥蜴】

    拆点 把每个点拆成入口和出口两个点 以下几种连边方式就行了 对于有蜥蜴的点,\(S\)向入口连1的边 对于能出去的点,出口向汇点连容量为\(inf\)的边 每个点的入口和出口连容量为高度的边 之后能相 ...

  6. public /protected/private的作用域

    作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×

  7. Vue开发 localhost 替换成 本机ip无法访问

    新版 vue-cli(@3.10.10) 构建的项目.localhost 替换成本机 ip 地址之后无法访问.但是替换成 127.0.0.1 可以访问 找到 config 文件夹下面的 index.i ...

  8. [Linux/Unix]用户和用户组管理

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统的用户,都必须拥有自己的账号. 实现用户的管理,主要做: 用户账号的添加.删除.修改: 用户口令的管理: 用户组的管理. (一)用户的 ...

  9. 还在占用存储的进程lsof grep deleted;

    查看僵尸进程 lsof grep deleted; 用于查看已经停止但还在占用存储的进程

  10. 2018 Wannafly summer camp Day3--Knight

    Knight 题目描述: 有一张无限大的棋盘,你要将马从\((0,0)\)移到\((n,m)\). 每一步中,如果马在\((x,y)(x,y)\),你可以将它移动到 \((x+1,y+2)(x+1,y ...