Struts2 官方教程:使用XML进行表单验证(Form Validation Using XML)

本篇教程的示例代码可以在 这里找到(译者注:github,听说要翻墙,不去)

介绍

本篇教程会讲解如何使用Struts2的XML验证方式来对用户在表单域中的输入进行验证。在《表单验证》教程中,讨论了使用动作类中validate方法来验证用户输入的方式。而使用一个单独的XML验证文件,让读者可以Struts2内建的验证器。

示例应用

本篇教程的示例应用展示了如何使用Struts2的XML验证方式。可以被编辑的信息被封装在Person类的一个对象实例里。
为了让用户能够编辑他被保存在Person实例的信息,要有以下的表单:
(截图略)
当用户提交表单时,站方希望对表单域的输入内容进行验证。

使用XML进行验证

可以使用包含了读者自己验证规则的一个单独XML文件,来进行表单域内容验证。包含了验证规则的XML文件必须被命名为ActionClassName-validation.xml。在本示例中,XML验证文件名为EditAction-validation.xml。
Struts2提供了几个读者可以使用在XML验证文件中的不同验证器。
在上面的表单里,站方希望保证用户输入一个名字。为了让Struts2框架实行这个规则可以使用Struts2 的requiredstring验证器。这个验证器检查用户在表单域中是否输入字符串的值。

XML验证器格式

在XML验证文件(本示例的EditAction-validation.xml)中应当是这样的XML:

XML Required String 验证器

<!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>
</validators>

在 validators 结点中,可以有一个或多个 validator 结点。type属性指定了读者希望Struts2框架使用的验证器(详见《验证》(我没译))。param name=”fieldname”结点被用来告诉框架,要应用这条规则的表单域。查看edit.jsp中的表单域以及它们name的取值(查看《Struts2表单标签 Form Tags》,如果读者还不太属性Struts2表单标签的使用)。message结点用于告诉框架,如果验证失败了,要显示的信息。
在 验证XML文件中,XML的写法也有别的选择。可以查阅Struts2官方文档 的《验证(Validation)》。
例如,用户没有在“名字”这个表单域中输入内容就点击了“保存”按钮,就会看到提示信息咯。(截图略)

验证电子邮件地址

读者可以使用Struts2 email validator 来验证用户在电子邮件域的输入,以下是验证器结点.

Email Validator

<validator type="requiredstring">
    <param name="fieldname">personBean.email</param>
    <message>请填入电子邮箱地址。</message>
</validator>
<validator type="email">
    <param name="fieldname">personBean.email</param>
    <message>邮箱地址不可用。</message>
</validator>

注意,在示例中,要求用户输入一个电子邮箱的地址,并且验证用户输入的地址。

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

通过使用正则验证器(regex validator),Struts2框架提供了强有力的方式验证用户在表单域的输入。在本示例中,站方希望确保用户输入的电话号码是999-999-9999这样的格式。使用一个正则表达式以及正则验证器来实行这条规则。

REGEX 验证器

<validator type="requiredstring">
    <param name="fieldname">personBean.phoneNumber</param>
    <message>请填入电话号码。</message>
</validator>
<validator type="regex">
    <param name="fieldname">personBean.phoneNumber</param>
    <param name="regex"><![CDATA[\d{3}-\d{3}-\d{4}]]></param>
    <message>请按999-999-9999格式输入电话号码</message>
</validator>

名为“expression”的参数结点用来指定会被应用到用户输入的正则表达式。注意正则表达式中有CDATA。

用OGNL表达式验证用户输入

在示例应用中,希望确保用户至少选中一个轿车模型的勾选框。为了实行这条规则,可以使用fieldexpression验证器。以下是这个验证器结点的XML代码。

FieldExpression验证器

<validator type="fieldexpression">
    <param name="fieldname">personBean.carModels</param>
    <param name="exepression"><![CDATA[personBean.carModels.length > 0]]></param>
    <message>请至少选择一个轿车模型。</message>
</validator>

name=”expression”结点包含了一个结果为true或false的OGNL表达式。先前并没有讨论过OGNL,这是Object-Graph Navigation Language(具体请见这里这里)。OGNL表达式可以被Struts2框架计算。
在上面的XML中,name=”expression”结点的取值:personBean.carModels.length>0,会被框架计算。personBean.carModels告诉框架,调用Person类的getCarModels方法。方法返回了一个Array。因为Array类型有length属性,框架将会获得被getCarModels方法返回的数组的length属性取值。
如果用户没有勾选任何一个,被getCarModels方法返回的数组,length取值会是0.因为OGNL表达式尽在长度值大于0时才会得到true,验证失败,则用户将会看到提示信息(截图略)。
fieldexpression验证器在进行对用户输入的条件判断时很有用。如果OGNL表达式不等于true,那么用户的输入不会被通过。

总结

Struts2框架提供了方便的验证方法。读者可以再动作类中添加validate方法,或者创建一个有验证规则的XML文件,当然也可以同时使用上述两种方法。

猜你喜欢

转载自blog.csdn.net/u010930289/article/details/77113690