该例子使用 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验证框架的使用,以及在实际操作中可能遇到的问题和解决方案。 首先,Struts2的验证框架主要基于两个组件:`Validation`和`Validator`。`Validation`是Action类的注解,而`Validator`则...
在`validationdemo`这个示例项目中,你可以看到一个完整的Struts2校验框架应用实例,包括Action类、校验规则配置、以及对应的视图展示。通过分析这个例子,你可以更好地理解和掌握Struts2的校验框架在实际开发中的...
在Struts2中,模型负责业务逻辑,视图负责展示数据,而控制器接收用户请求并协调模型和视图的交互。 2. **Struts2入门**: 创建一个简单的Struts2应用通常涉及以下步骤: - 引入Struts2库:在项目中添加Struts2的...
- 理解MVC模式并实践在Struts2中的应用。 - 掌握Struts2的配置文件`struts.xml`,包括Action配置、结果类型配置等。 - 学习使用Struts2提供的标签库,提升视图层的开发效率。 - 实践Action类的编写,了解请求...
在Struts2中,验证框架是其核心特性之一,它允许开发者对用户输入的数据进行校验,确保数据的完整性和安全性。这个“struts2验证框架示例”提供了深入理解并实际操作Struts2验证功能的机会。 首先,让我们了解一下...
本篇将详细讲解如何在Struts2中实现一个简单的验证框架模式。 首先,我们需要了解Struts2验证框架的基本概念。验证框架允许开发者定义一组规则来检查用户提交的数据,如果数据不符合预设的规则,框架会返回错误消息...
验证框架是Struts2中的另一大亮点,它提供了一种有效的方式来检查用户输入的合法性,防止非法数据进入系统。Struts2支持两种验证方式:基于XML的验证和基于注解的验证。在这个简单例子中,我们可能会看到在Action类...
Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建企业级Java Web应用程序。在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化...
5. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2中的表达式语言,用于在Action和视图之间传递数据。例如,`${user.name}`可以在JSP中获取User对象的name属性。 6. **拦截器**:Struts2的拦截器...
在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...
在Struts2中,MVC模式被用来分离业务逻辑、视图展示和用户交互。Model代表业务逻辑,View负责数据展示,Controller处理用户的请求并协调Model和View之间的交互。Struts2的Action类就是Controller的实现,它接收请求...
在本文中,我们将深入探讨如何在Struts中使用Validator框架,并通过三个逐步进阶的实例来理解其工作原理。 首先,我们来看第一个实例——Validator_Struct_01。在这个基础案例中,我们将了解如何设置基本的...
这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。
Struts2和Spring2是Java Web开发中两个非常重要的开源框架。Struts2是一个用于构建MVC(模型-视图-控制器)架构的框架,它提供了丰富的动作和拦截器库,便于实现业务逻辑和控制层的解耦。而Spring2则是一个全面的...
用户名、密码、年龄、电话号、email、日期验证、合法链接 的验证例子。
### Struts2框架整合Spring框架在文件上传下载中的应用 #### 一、引言 随着互联网技术的迅速发展,Web应用程序的功能越来越丰富,文件的上传下载功能已成为许多Web应用不可或缺的一部分。例如,在博客、电子邮件...
接下来,我们将通过一个具体的例子来深入理解Struts2校验框架的配置和使用方法。 ##### 3.1 配置文件 Struts2校验框架的配置文件通常命名为`validation.xml`,并遵循特定的DTD格式。例如,以下是一段典型的校验...
通过这个简单的例子,你可以了解如何使用Struts2构建一个基础的Web应用。然而,Struts2的功能远不止这些,它还支持国际化的多语言处理、文件上传下载、AJAX交互、复杂表单验证、RESTful服务等多种特性。随着深入学习...