1、建立一个实体类,主要是对因为登陆而设置的这个验证框架,所以首先创建一个用户实体类
- 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;
- }
- }
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类
- 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";
- }
- }
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"?>
- <!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="name">
- <field-validator type="requiredstring">
- <message>账号不能为空</message>
- </field-validator>
- </field>
- <field name="password">
- <field-validator type="requiredstring">
- <message>密码不能为空</message>
- </field-validator>
- </field>
- </validators>
<?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="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"?>
- <!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">
- <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>
<?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">
<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>
<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有效