![]() |
|
| 当前位置: > 主页>网络编程>Java>JAVA开发技巧>使用 Struts Validator(1) |
|
在这个示例中,我用了两个最简单、也最常见的在 username 和 password 字段上的规则。第一个规则是 required(必需的),而且像其他规则一样,由 field 元素的 depends 属性指定。只需列出想要使用的规则,一个接着一个,用逗号分隔即可。然后,对于每个规则,要提供一些数据供 validator 使用。例如,required 规则需要一个参数;这个参数是字段的名称,在字段没有错误时,显示在生成的错误信息上。使用 arg0 元素可以提供这个名称(在这个示例中,是 prompt.username 和 prompt.password,直接从可信任的 MessageResources.properties 文件提取)。现在开始来看这些内容是如何合在一起的吧? 除了 required 规则,我还使用 minlength 规则。(请注意这些规则是 大小写敏感的!如果录入错误,就会被忽略,会让人很郁闷。)这条规则要求的参数不止一个;它需要一个变量指明字段可以接受的最小长度。这个值通过 var、var-name 和 var-value 元素传递给 minlength 规则。从代码中看它应当更清楚,所以我让您自己去弄清楚这里发生的事情。 最后,还需要另一个参数 —— 这次针对的是 minlength 规则可能需要生成的任意错误消息。因为 arg0 被 required 规则使用了,所以在此基础上加 1,用 arg1 向 minlength 规则提供必需的最小字符数。 请注意在这里变量是如何引用的。resource="false" 语句告诉 validator 从当前文件中得到这个数据,而不是从应用程序的资源绑定(MessageResources.properties)中获得。 这里,应用程序将要求用户名和口令字段的值,还要求输入这些字段的数据有最小长度(请注意每个字段的最小长度不同)。非常漂亮!即使 validation.xml 中的规则定义非常详细,对于每个规则该做什么也非常清楚。 使用 Validator 的内置规则 Struts Validator 自带了许多有用的内置规则;可以检查数据类型(integer、data、byte 等等。)和数据的范围(range)。已经看过的有 minlength 规则,还有 maxlength 规则。甚至可以用 creditCard 规则保证数字和信用卡的数字格式匹配。我要使用另两个规则 —— email 和 url —— 来验证测试表单上的数据正确。 下面是 validation.xml 中的一些新规则:
第一个要求 E-Mail 字段中的数据必须是正确的地址(让 Struts 处理它不好么?)。第二个确保 URL 是正确的。(请注意:至少在我自己的测试中,Struts 没有生成 URL 验证方法 的 JavaScript 版本。这意味着如果所有的表单字段都包含正确的数据,而独独 URL 字段不包含,那么客户端验证会通过但是服务器端验证会失败。这并不是可能发生的最坏的事情,因为 URL 字段仍然会得到验证,但是我期望在 Struts 的未来版本中,这个问题会得到纠正。在任何情况下,显示没有理由可以停用 url 规则。) 使用 mask 规则 在许多情况下文本数据需要采用特殊的格式;但是 Struts 不可能解决所有这些可能的格式:电话号码、电子邮件地址、URL、邮编、驾驶证号......这个列表在不断地增长。所以,Struts 只处理最常见的(email 和 url),而为其他格式提供了 mask 规则。使用正则表达式,可以用 mask 规则指定自己的文本模式。 如果对于正则表达式比较熟悉,那么这就是小菜一碟。(对正则表达式的介绍超出了本教程的范围。如果需要帮助,请参阅 参考资料 获得关于正则表达式的更多内容。例如,可以这样定义 phone 字段的规则:
这是一个使用得很普遍的模式,它允许输入各种流行的电话格式。如果使用了错误的表单,Validator 会输出关于错误数据的消息。 但是,可以容易地在多个地方使用同一个掩码。每次使用时不必重新定义,只要把掩码定义移动到 global constant 即可。请把下面的内容添加到 validation.xml 文件中的 global 元素内(靠近文件顶部):
现在修改 phone 字段的条目,像下面这样使用新的常数掩码值:
现在在整个应用程序的验证规则中,都可以用其他形式重用这个模式。 最后,请注意,我没有提供 Validator 内置规则的完整列表。这是有意的,因为这些规则在不断地变化,随时都有对新规则的支持出现。对于最新的规则集,请查看在线的 Struts Validator 开发指南(请参阅 参考资料 获得链接)。谁知道在您阅读这篇教程的时候会有什么有趣的规则可用呢?
|
|||||||||||||||||||||||||||||||||||||||||||