一、 使用validate方法验证
ActionSupport类已经实现了Validateable接口,空实现了validate()方法,struts会在执行execute()前先执行validate(),编写时只要覆写validate()方法即可。
1. 页面中若要显示验证信息,有三个标签可以使用
- <s:actionerror /> 动作错误信息
- <s:fielderror key="..." /> 字段错误信息,此错误需要有一个key
- <s:actionmessage /> 动作信息
2. Action类直接覆写ActionSupport父类的validate()方法
public void validate() {
if (!msg.equalsIgnoreCase("hello")) {
this.addFieldError("key", "必须输入hello!");
this.addActionError("处理动作失败!");
} else {
this.addActionMessage("提交成功!");
}
}
三个addXXX()方法对应上面三个标签可能输出的信息。
3. 页面编写
<s:actionerror/>
<s:actionmessage/>
<s:form action="validate.action" theme="simple">
输入内容:<s:textfield name="msg"/>
<s:fielderror key="msg.hello"/>
<br/>
<s:submit/>
</s:form>
二、使用Validation框架验证数据
1. 编写验证规则配置文件,此文件必须放在Action.class同一目录下
命名规则:<ActionClassName>-validation.xml 或 <ActionClassName>-<ActionAliasName>-validation.xml
<?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="msg">
<field-validator type="requiredstring">
<message>请输入信息</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">13</param>
<param name="max">20</param>
<message>必须在13至20之间</message>
</field-validator>
</field>
</validators>
2. Actoin类不需要再覆写validate()方法
3. 页面编写:
<s:form action="new_validate" >
<s:textfield name="msg" label="姓名"/>
<s:textfield name="age" label="年龄"/>
<s:submit/>
</s:form>
1)Action中添加User属性,需要验证User下的name和age
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
2) User.java
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3)validation.xml中添加对象user
<field name="user">
<field-validator type="visitor">
<param name="context">abc</param>
<param name="appendPrefix">true</param>
<message>User:</message>
</field-validator>
</field>
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>请输入name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">5</param>
<param name="max">20</param>
<message>必须在5到20之间</message>
</field-validator>
</field>
</validators>
<s:form action="new_validate" >
<s:textfield name="msg" label="姓名"/>
<s:textfield name="age" label="年龄"/>
<s:textfield name="user.name" label="姓名1"/>
<s:textfield name="user.age" label="年龄1"/>
<s:submit/>
</s:form>
加了前缀的user.name和user.age正是需要验证的嵌套了的两个属性。