最近在研究Struts2的验证框架,写写它的实现步骤,对大家进一步了解Struts2的验证有一定的帮助。
为什么要验证框架
-
用户无需编码,在外部配置文件中指定某个字段的验证类型,并提供出错信息即可
-
使用验证框架可以减轻开发者负担,提高开发效率
下面通过一个实例来说明:
先看需求:完成一个注册页面的验证,需求如下:
- 用户名:不能为空,长度在6和10之间
- 密码:不能为空,密码长度>=6
- 确认密码:必须和密码相同
- 电话:不能为空,符合电话号码格式
- 用户姓名:不能为空,长度在2和4之间
第一步:创建RegisterAction
public class RegisterAction extends ActionSupport {
private User user; // 用户信息
private String repassword; // 确认密码
private UserBiz userBiz = new UserBizImpl();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
// 验证方法
public void validateExecute() {
if (!userBiz.validate(user.getName().trim())) {
addFieldError("user.name", "用户名存在");
}
}
// 注册方法
public String execute() {
if (!userBiz.register(user)) {
this.addFieldError("user.name", "注册失败");
return INPUT;
}
return SUCCESS;
}
}
第二步:在struts.xml中配置action
通过“input”指定验证错误时需返回的页面
<!-- 用户注册 -->
<action name="register" class="cn.jbit.houserent.action.RegisterAction">
<result name="input">/page/register.jsp</result>
<result>/page/success.jsp</result>
</action>
第三步:创建注册页面register.jsp
注意:当使用s标签的时候,出错信息会自动显示在相应的验证表单项后
<s:form action="register">
<s:textfield name="user.name" label="用户名" />
<s:password name="user.password" label="密码" />
<s:password name="repassword" label="确认密码" />
<s:textfield name="user.telephone" label="电话" />
<s:textfield name="user.username" label="用户姓名" />
<s:submit value="立即注册"></s:submit>
</s:form>
第四步:创建验证文件
要和验证的Action放在同一个包下
命名ClassName-validation.xml或ClassName-alias-validation.xml,其中ClassName表示Action类名,而alias表示在struts.xml中配置Action的名字。后者用于Action中有多个业务方法时
<?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="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>密码长度须在${minLength}和${maxLength}之间</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression">
user.password==repassword
</param>
<message>密码和确认密码必须相同</message>
</field-validator>
</field>
<field name="user.telephone">
<field-validator type="requiredstring">
<message>电话号码不能为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression">
^(\d{3,4}-)+(\d{7,8})$
</param>
<message>电话号码格式不正确</message>
</field-validator>
</field>
</validators>
第五步:使用验证框架编写验证规则
验证文档里的<field-validator type="">中的type类型要和User中的属性类型一致,否则会报类型转换错误
field-validator的type的取值:
int 整数;
double 实数;
date 日期;
expression 两数的关系比较;
email Email地址;
url web地址;
regex 正则表达式验证;
conversion 转换;
required 是否为空;
requiredstring 必须字符;
stringlength 输入字符长度限制;
通过以上的步骤之后,就可以实现Struts2的验证功能。