表单验证Validate:
首先为Action提供<result name="input">错误信息的显示界面,如login.jsp</result>
界面中调试标签<s:debug></s:debug>,可以查看值栈内容
- 使用addFieldError
界面中任意位置可以用EL访问,形式如${errors.username[0]} (推荐)
可以指定<s:fielderror />处显示全部出错信息。或者
用<s:fielderror><s:param>username</s:param></s:fielderror>显示特定出错信息,但这种方式不如直接用EL灵活,这种方式显示的结果一定是另起一行的(块级的,相当于div)。
在Action(继承ActionSupport)中
@Override
public void validate() {
// TODO Auto-generated method stub
super.validate();
if(null==username||"".equals(username)){
addFieldError("username", "用户名不能为空!");
}
if(null==password||"".equals(password)){
addFieldError("password", "密码不能为空!");
}
}
注意validate方法还可以是validateXxx后面是Action自定义扩展的处理器方法名。由于Struts2通过反射实现调用,性能较差,而validate方法是通过接口Validateable调用的。
2. 使用addActionError
界面中为通用标记<s:actionerror/>
Action中使用 addActionError("用户名不能为空!");
3. 使用structs框架验证
可配置化校验框架是通过validation拦截器组件实现的, 命名为Action类名-validation.xml或者Action类名-Action类逻辑名-validation.xml,或者Action类名-方法名-validation.xml.
eg:
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="password_null"/>
</field-validator>
<field-validator type="regex">
<!-- -->
<param name="expression"><![CDATA[(\w{4,10})]]></param>
<message>密码应为4-10位</message>
</field-validator>
</field>
</validators>
有时候在一个Action中有不同的处理方法,每一个方法校验规则都不同。为每一个方法配置一个校验文件,命名为Action类名-方法名-validation.xml;对于在Action程序中的校验,若要分别写校验方法,则命名规则为validate+方法名(首字母大写)。