在编写Action这一章节中,我们通过几行java代码来验证username和password。当然,在大型的应用程序中,这将是个很耗时的工作,即使这几行java代码也可能变成维护的重大负担。
令人高兴的是,本框架提供了一个验证框架,这个验证框架能够对输入数据进行后台验证。
一. 代码
验证能够通过XML文档来描述,或者使用注解(annotations)。XML文档的名称以Action的名字为开头,以“-validation”作为文件名后缀。当我们想要验证Logon Action的时候,我们文件名可以命名为Logon-validation.xml。Logon-validation.xml的代码如下:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2 //EN"
"http://www.opensymphony.com/xwork/xwork-validator- 1.0.2 .dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>Username is required</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>Password is required</message>
</field-validator>
</field>
</validators>
在Logon.java后我们创建一个Logon-validation.xml文件。并将上述粘贴到该文件中。
页面第一次显示的时候,我们不想引发验证。我们需要在被告诉有输入不正确前有机会输入数据。通过验证的一种方式是找到一个ActionSupport基类提供的特定的“input”方法。为了这样做,我们需要编辑Welcome页面和Logon的映射。
Welcome.jsp的修改代码如下:
<li><a href="<s:url action="Logon"/>">Sign On</a></li>
<li><a href="<s:url action="Logon_input"/>">Sign On</a></li>
struts.xml的修改代码如下:
<action name="Logon" class="tutorial.Logon">
<action name="Logon_*" method="{1}" class="tutorial.Logon">
二. 代码是如何工作的?
为了打开Logon表单,Welcome页面涉及了Logon_input。
1. 框架将这个引用于Logon_*映射相匹配起来;
2. “method={1}”属性被“method=input”替换;
3. 框架调用了Logon Action类的input方法;
4. 因为“input”在一个特殊的方法的列表中,所以验证框架将不会调用;
5. 默认的input方法返回一个“input”作为返回结果;
6. 框架展现“Logon.jsp”来作为回应结果,没有带有任何的验证信息。
为了提交Logon表单,Login页面引用了Logon。
1. 框架为目标Action——Logon提供验证;
2. 找到Logon-validation.xml文件,框架为该类创建了一个验证对象,这个验证对象基于XML文件;
3. 验证器对输入的数据产生作用;
4. 如果验证失败,错误信息被添加到内部序列中;
5. 当所有的验证器都已经执行后,如果框架发现有错误信息产生,它寻找“input”结果对应的页面,而不调用Action类;
6. 如果通过验证,调用Action的方法,返回“success”对应的结果。
三. 需要记住的东西
框架提供了一个验证框架。一个输入域可以绑定一个验证器集合。如果验证失败,框架将会返回输入信息页,并显示错误信息。为了通过验证,一个特殊的“input”方法将被调用,来代替默认的“execute”方法。
下一章:本地化输出
上一章:选择结果