最近使用了一下struts2的验证框架,感觉不错。但其中也发现了一些技巧和问题,先总结如下。
1、建立一个实体类,主要是对因为登陆而设置的这个验证框架,所以首先创建一个用户实体类
Java代码
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/*
*
* 用户
*
*/
@Entity
@Table(name = "user_tbl")
public class UserEntity extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 用户名
*/
private String name;
/**
* 用户密码
*/
private String password;
@Column(name = "name", length = 255, nullable = false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "password", length = 255, nullable = false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、创建登陆的Action类
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.zaotao.entity.UserEntity;
import com.zaotao.service.manage.IAdminService;
/**
* 管理员的普通action
* @author 管理员
*
*/
public class AdminAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 用户实体
*/
private UserEntity user;
/**
* 验证码
*/
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public UserEntity getUser() {
return user;
}
public void setUser(UserEntity user) {
this.user = user;
}
/**
* 登录
* @return 登录成功
*/
public String loginAdmin()
{
return "success";
}
}
3、由于struts2的查找机制(这个可以参考相关资料),我们在这两个类所在的包中分别新建UserEntity-validation.xml和AdminAction-validation.xml
(1)UserEntity-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>账号不能为空</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field>
</validators>
(2)AdminAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<validators>
<field name="user">
<field-validator type="visitor">
<message>用户:</message>
</field-validator>
</field>
<field name="code">
<field-validator type="fieldexpression">
<param name="expression">
#session.CODE.equalsIgnoreCase(code)
</param>
<message>${#session.CODE}:${code}</message>
</field-validator>
</field>
</validators>
4、建立登陆的jsp页面
<s:form id="loginForm" action="login_AdminAction">
<div class="admin_main_top"></div>
<div id="admin_main">
<div class="admin_main_head"></div>
<div id="admin_main_content">
<ul class="admin_main_ul">
<li>
<label>用户名:</label>
<s:textfield name ="user.name" id="name"/>
<span id="usererror" class="errorMeg"></span>
</li>
<li>
<label>密码:</label>
<s:password id="pwd" name="user.password" οnfοcus="clearError('pwderror')" />
<span id="pwderror" class="errorMeg"></span>
</li>
<li>
<label>验证码:</label>
<img src="<%=contextPath %>/authImg.servlet" id="authImg" οnclick="refresh()" />
<s:textfield name="code" id="code" onFocus="clearError('codeerror');" />
<span id="codeerror" class="errorMeg"></span>
</li>
<li>
<s:submit id="login_button" value="登录" />
</li>
</ul>
</div>
</div>
<div><s:fielderror cssStyle="color: red"></s:fielderror></div>
</s:form>
Action的配置就不写了,说一下注意点。
(1)
<field-validator type="visitor">
<message>用户:</message>
</field-validator>
这段代码中message标签内不能为空,否则将会报错,visitor类型的作用在于,当验证字段user时,将获得user的类型,并根据类型UserEntity查找UserEntity-validation.xml,执行验证。
(2)
当你使用了图形验证码,你想在验证框架中将其进行验证时。需要先将图形验证码的字符串放入session中,然后在验证框架中验证。
<message>${#session.CODE}:${code}</message>
写这句的原因是我在执行图形验证的时候,老是验证不正确,所以我使用这句话,将存放在session中的code和我输入的code在错误信息内输出,已查看是否出现问题
(3)
如果你的表单使用的是simple方式,那么s:form是不会显示错误信息的,那么
我们在jsp页面写入 <s:fielderror cssStyle="color: red"></s:fielderror>,用来输出错误信息,当然你也可以针对每个字段输出错误信息。如果错误信息重复显示,说明你的action采用的单例模式,请将其修改为scope="prototype"
(4)
使用struts验证框架,需要配置input结果跳转。
(5)
若校验同时提供XML和validate()两种方法,则都会被执行,而且是XML校验先执行,validate()方法后执行。而错误信息都会显示。"short-circuit"属性仅针对xml有效
转载地址:http://www.iteye.com/topic/491313