struts2官方 中文教程 系列十一:使用XML进行表单验证
Posted 爱前端的后端Coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2官方 中文教程 系列十一:使用XML进行表单验证相关的知识,希望对你有一定的参考价值。
在本教程中,我们将讨论如何使用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):
1 <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 2 3 <validators> 4 <validator type="requiredstring"> 5 <param name="fieldname">personBean.firstName</param> 6 <message>First name is required.</message> 7 </validator> 8 </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进行表单验证的主要内容,如果未能解决你的问题,请参考以下文章
struts2官方 中文教程 系列九:Debugging Struts