Struts2中使用验证框架的简单例子

该例子使用 Hibernate 3.3 + Struts 2.1,数据库使用Oracle。

一、实体类和实体映射类

package entity;

/**
 * Users entity. @author MyEclipse Persistence Tools
 */

public class Users implements java.io.Serializable {

	// Fields

	private Integer id;
	private String name;
	private String password;
	private String telephone;
	private String username;
	private String isadmin;

	// Constructors

	/** default constructor */
	public Users() {
	}

	/** full constructor */
	public Users(String name, String password, String telephone, String username, String isadmin) {
		this.name = name;
		this.password = password;
		this.telephone = telephone;
		this.username = username;
		this.isadmin = isadmin;
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTelephone() {
		return this.telephone;
	}

	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getIsadmin() {
		return this.isadmin;
	}

	public void setIsadmin(String isadmin) {
		this.isadmin = isadmin;
	}

}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="entity.Users" table="USERS" schema="HOUSE">
        <id name="id" type="java.lang.Integer">
            <column name="ID" precision="7" scale="0" />
            <generator class="sequence">
            	<param name="sequence">user_seq</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="50" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" length="50" />
        </property>
        <property name="telephone" type="java.lang.String">
            <column name="TELEPHONE" length="15" />
        </property>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="50" />
        </property>
        <property name="isadmin" type="java.lang.String">
            <column name="ISADMIN" length="5" />
        </property>
    </class>
</hibernate-mapping>

二、接口和接口实现类

公用的Hibernate

package dao;

import java.io.Serializable;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import util.HibernateSessionFactory;

/**
 * 公用的Hibernate
 * 
 * @author miao
 * 
 */
public class BaseHibernateDao<T> {

	/**
	 * 获得会话
	 * 
	 * @return
	 */
	public Session getSession() {
		return HibernateSessionFactory.getSession();
	}

	/**
	 * 关闭会话
	 */
	public void closeSession() {
		HibernateSessionFactory.closeSession();
	}

	/**
	 * 根据主键查询
	 */
	@SuppressWarnings("unchecked")
	public T get(Class<T> clz, Serializable id) {
		T ret = null;
		Session session = this.getSession();
		try {
			ret = (T) session.get(clz, id);
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			closeSession();
		}
		return ret;
	}

	/**
	 * 传HQL语句,并带参数,查询返回一个对象
	 * 
	 * @param hql
	 * @param param
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public T findEntity(String hql, Object... param) {
		Query query = getSession().createQuery(hql);
		if (param != null) {
			for (int i = 0; i < param.length; i++) {
				query.setParameter(i, param[i]);
			}
		}
		return (T) query.uniqueResult();
	}

	/**
	 * 添加一条记录
	 * 
	 * @param entity
	 */
	public boolean add(T entity) {
		boolean success = true;
		Transaction tx = null;
		Session session = getSession();
		try {
			tx = session.beginTransaction();
			session.save(entity);
			tx.commit();
		} catch (HibernateException e) {
			if (null != tx) {
				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			closeSession();
		}
		return success;
	}

	/**
	 * 更新记录
	 * 
	 * @param entity
	 * @return
	 */
	public boolean update(T entity) {
		boolean success = true;
		Transaction tx = null;
		Session session = getSession();
		try {
			tx = session.beginTransaction();
			session.update(entity);
			tx.commit();
		} catch (HibernateException e) {
			if (null != tx) {
				tx.rollback();
			}
			e.printStackTrace();
			success = false;
		} finally {
			closeSession();
		}
		return success;
	}

	/**
	 * 得到所有的记录
	 * 
	 * @param clz
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<T> getAll(Class<T> clz) {
		Session session = getSession();
		List<T> items = null;
		try {
			items = session.createCriteria(clz).list();
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			closeSession();
		}
		return items;
	}

	/**
	 * 传HQL语句,并带参数,查询 第二个参数可选
	 * 
	 * @param hql
	 * @param param
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<T> findByHql(String hql, Object... param) {
		Query query = getSession().createQuery(hql);
		if (param != null) {
			for (int i = 0; i < param.length; i++) {
				query.setParameter(i, param[i]);
			}
		}
		return query.list();
	}

	/**
	 * 删除记录
	 * 
	 * @param clz
	 * @param id
	 * @return 删除成功返回true,失败则返回false
	 */
	public boolean delete(Class<T> clz, Serializable id) {
		boolean success = true;
		Transaction tx = null;
		Session session = getSession();
		try {
			tx = session.beginTransaction();
			@SuppressWarnings("unchecked")
			T obj = (T) session.get(clz, id);
			session.delete(obj);
			tx.commit();
		} catch (HibernateException e) {
			if (null != tx) {
				tx.rollback();
			}
			e.printStackTrace();
			success = false;
		} finally {
			closeSession();
		}
		return success;
	}

	/**
	 * 默认的查询
	 * 
	 * @param clazz
	 * @param condition
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<T> search(Class<T> clazz, T condition) {
		Session session = getSession();
		List<T> results = null;
		try {
			results = session.createCriteria(clazz).add(Example.create(condition)).list();
		} catch (RuntimeException re) {
			re.printStackTrace();
		} finally {
			closeSession();
		}
		return results;
	}

}

dao

package dao;

import entity.Users;
/**
 * 接口
 * @author miao
 *
 */
public interface UsersDao {

	/**
	 * 注册用户
	 * 
	 * @param user
	 * @return
	 */
	public boolean register(Users user);

}

 

daoImpl

package dao.impl;

import dao.BaseHibernateDao;
import dao.UsersDao;
import entity.Users;

/**
 * 接口实现类
 * 
 * @author miao
 * 
 */
public class UsersDaoImpl extends BaseHibernateDao<Users> implements UsersDao {

	/**
	 * 注册用户
	 */
	public boolean register(Users user) {
		return super.add(user);
	}

}

 

 

三、业务类和业务实现类

package biz;

import entity.Users;

/**
 * 业务
 * 
 * @author miao
 * 
 */
public interface UsersBiz {

	/**
	 * 注册用户
	 * 
	 * @param user
	 * @return
	 */
	public boolean register(Users user);

}
package biz.impl;

import dao.UsersDao;
import dao.impl.UsersDaoImpl;
import entity.Users;
import biz.UsersBiz;

/**
 * 业务实现类
 * 
 * @author miao
 * 
 */
public class UsersBizImpl implements UsersBiz {

	// 调用dao
	UsersDao usersDao = new UsersDaoImpl();

	/**
	 * 注册用户
	 */
	public boolean register(Users user) {
		return usersDao.register(user);
	}

}

 

 

四、Action

1.注册用的Action

2.验证框架xml文件

3.写配置的时候用到的提示文件 xwork-validator-1.0.2.dtd 

 

action

package action;

import biz.UsersBiz;
import biz.impl.UsersBizImpl;
import com.opensymphony.xwork2.ActionSupport;
import entity.Users;

/**
 * 用户的Action
 * 
 * @author miao
 * 
 */
public class UsersAction extends ActionSupport {

	UsersBiz usersBiz = new UsersBizImpl(); // 业务类

	private Users users; // 注册实体类

	private String name; // 名字
	private String password; // 密码
	private String message;// 返回的提示信息
	private String repassword;// 新加入的属性,用来接收确认密码

	public String getRepassword() {
		return repassword;
	}

	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Users getUsers() {
		return users;
	}

	public void setUsers(Users users) {
		this.users = users;
	}

	/**
	 * 注册
	 * 
	 * @return
	 */
	public String register() {
		if (usersBiz.register(users)) {
			return SUCCESS;
		} else {
			super.addActionMessage("注册失败");
			return INPUT;
		}
	}
}

 

验证框架,通过xml实现

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"xwork-validator-1.0.2.dtd">
<validators>

	<!-- 验证用户名 -->
	<field name="users.name">
		<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="users.password">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>密码不能为空</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">6</param>
			<message>密码长度必须大于等于${minLength}</message>
		</field-validator>
	</field>

	<!-- 验证密码确认 -->
	<field name="repassword">
		<field-validator type="fieldexpression">
			<param name="expression">users.password==repassword</param>
			<message>密码和确认密码必须相同</message>
		</field-validator>
	</field>

	<!-- 验证固话 -->
	<field name="users.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>

	<!-- 用户姓名的验证 -->
	<field name="users.username">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>用户 姓名不能为空</message>
		</field-validator>
		<field-validator type="stringlength">
			<param name="minLength">2</param>
			<param name="maxLength">4</param>
			<message>用户姓名长度须在${minLength}和${maxLength}之间</message>
		</field-validator>
	</field>
</validators>

 

 

五、页面(注册页面和注册成功页面)

注册

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":"
			+ request.getServerPort() + path + "/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<base href="<%=basePath%>" />
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>用户注册</title>
	</head>
	<body>
		<div id="regLogin" class="wrap">
			<div class="dialog">
				<dl class="clearfix">
					<dt>新用户注册</dt>
					<dd class="past">填写个人信息</dd>
				</dl>
				<div class="box">
					<s:form action="register" method="post" namespace="/">
						<div class="infos">
							<table class="field">
								<tr>
									<td class="field">用 户 名:</td>
									<td>
										<s:textfield name="users.name" cssClass="text" />
										<s:fielderror fieldName="users.name" />
									</td>
								</tr>
								<tr>
									<td class="field">密 码:</td>
									<td>
										<!-- 保留密码 -->
										<s:password name="users.password" cssClass="text" showPassword="true" />
										<s:fielderror fieldName="users.password" />
									</td>
								</tr>
								<tr>
									<td class="field">确认密码:</td>
									<td>
										<s:password name="repassword" cssClass="text" showPassword="true" />
										<s:fielderror fieldName="repassword" />
									</td>
								</tr>
								<tr>
									<td class="field">电 话:</td>
									<td>
										<s:textfield name="users.telephone" cssClass="text" />
										<s:fielderror fieldName="users.telephone" />
									</td>
								</tr>
								<tr>
									<td class="field">用户姓名:</td>
									<td>
										<s:textfield name="users.username" cssClass="text" />
										<s:fielderror fieldName="users.username" />
									</td>
								</tr>
							</table>
							<div class="buttons">
								<s:submit value="注册" />
							</div>
						</div>
					</s:form>
				</div>
			</div>
		</div>
	</body>
</html>

 

注册成功

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":"
			+ request.getServerPort() + path + "/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<base href="<%=basePath%>" />
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>注册成功</title>
	</head>
	<body>
		<div id="regLogin" class="wrap">
			<p>恭喜:注册成功!</p>
		</div>
	</body>
</html>

 

 

六、demo

Struts2-Validation.zip

猜你喜欢

转载自z18022893621.iteye.com/blog/1969373
今日推荐