表单验证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+方法名(首字母大写)。