`
IT阿狸
  • 浏览: 67923 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 

分享到:
评论

相关推荐

    struts2验证框架简单实例

    本实例将带你深入理解Struts2验证框架的使用,以及在实际操作中可能遇到的问题和解决方案。 首先,Struts2的验证框架主要基于两个组件:`Validation`和`Validator`。`Validation`是Action类的注解,而`Validator`则...

    Struts2校验框架应用

    在`validationdemo`这个示例项目中,你可以看到一个完整的Struts2校验框架应用实例,包括Action类、校验规则配置、以及对应的视图展示。通过分析这个例子,你可以更好地理解和掌握Struts2的校验框架在实际开发中的...

    struts2简单例子

    在Struts2中,模型负责业务逻辑,视图负责展示数据,而控制器接收用户请求并协调模型和视图的交互。 2. **Struts2入门**: 创建一个简单的Struts2应用通常涉及以下步骤: - 引入Struts2库:在项目中添加Struts2的...

    Struts2框架做的用户登录的简单实例

    - 理解MVC模式并实践在Struts2中的应用。 - 掌握Struts2的配置文件`struts.xml`,包括Action配置、结果类型配置等。 - 学习使用Struts2提供的标签库,提升视图层的开发效率。 - 实践Action类的编写,了解请求...

    struts2验证框架示例

    在Struts2中,验证框架是其核心特性之一,它允许开发者对用户输入的数据进行校验,确保数据的完整性和安全性。这个“struts2验证框架示例”提供了深入理解并实际操作Struts2验证功能的机会。 首先,让我们了解一下...

    struts2 -2.3.15.3-验证框架简单实现mode

    本篇将详细讲解如何在Struts2中实现一个简单的验证框架模式。 首先,我们需要了解Struts2验证框架的基本概念。验证框架允许开发者定义一组规则来检查用户提交的数据,如果数据不符合预设的规则,框架会返回错误消息...

    struts2简单例子源码

    验证框架是Struts2中的另一大亮点,它提供了一种有效的方式来检查用户输入的合法性,防止非法数据进入系统。Struts2支持两种验证方式:基于XML的验证和基于注解的验证。在这个简单例子中,我们可能会看到在Action类...

    struts2标签使用例子

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建企业级Java Web应用程序。在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化...

    Struts2框架实例

    5. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2中的表达式语言,用于在Action和视图之间传递数据。例如,`${user.name}`可以在JSP中获取User对象的name属性。 6. **拦截器**:Struts2的拦截器...

    struts2官方例子7-表单验证 xml形式的验证

    在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...

    java框架struts2 简单完整实例

    在Struts2中,MVC模式被用来分离业务逻辑、视图展示和用户交互。Model代表业务逻辑,View负责数据展示,Controller处理用户的请求并协调Model和View之间的交互。Struts2的Action类就是Controller的实现,它接收请求...

    struts中使用validator验证框架

    在本文中,我们将深入探讨如何在Struts中使用Validator框架,并通过三个逐步进阶的实例来理解其工作原理。 首先,我们来看第一个实例——Validator_Struct_01。在这个基础案例中,我们将了解如何设置基本的...

    Struts2的validate验证框架

    这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。

    Struts2与Spring2框架整合实例

    Struts2和Spring2是Java Web开发中两个非常重要的开源框架。Struts2是一个用于构建MVC(模型-视图-控制器)架构的框架,它提供了丰富的动作和拦截器库,便于实现业务逻辑和控制层的解耦。而Spring2则是一个全面的...

    struts2简单验证框架

    用户名、密码、年龄、电话号、email、日期验证、合法链接 的验证例子。

    Struts2框架整合Spring框架在文件上传下载中的应用基于HT T P 传输协议, 采用Struts2 框架整合Spring 框架技术对Web 中文件的上传下载进

    ### Struts2框架整合Spring框架在文件上传下载中的应用 #### 一、引言 随着互联网技术的迅速发展,Web应用程序的功能越来越丰富,文件的上传下载功能已成为许多Web应用不可或缺的一部分。例如,在博客、电子邮件...

    struts2校验框架

    接下来,我们将通过一个具体的例子来深入理解Struts2校验框架的配置和使用方法。 ##### 3.1 配置文件 Struts2校验框架的配置文件通常命名为`validation.xml`,并遵循特定的DTD格式。例如,以下是一段典型的校验...

    struts2的一个简单的例子

    通过这个简单的例子,你可以了解如何使用Struts2构建一个基础的Web应用。然而,Struts2的功能远不止这些,它还支持国际化的多语言处理、文件上传下载、AJAX交互、复杂表单验证、RESTful服务等多种特性。随着深入学习...

Global site tag (gtag.js) - Google Analytics