- 浏览: 89088 次
文章分类
最新评论
开发者突击SSH2OA项目学习笔记,这里的登陆注册界面和之前学习过的SSH项目
框架相同,这里不再赘述
一、首先我们进入主界面Welcome.jsp,我们看其中的个人通讯录选项
(一)
1.点击个人通讯录选项,请求提交给AddressAction类的init()方法,发现其中
有clearErrorsAndMessages方法,我们查看相应的API,
于同一个Action类的继续使用以及清除该类部分状态是有用的。
(二)
2Criteria criteria = session.createCriteria(Address.class)是根据给定的
映射类生成相应的criteria对象。
而criteria.add(Restrictions.eq("username", username))注意是判断
username这个属性名字给定的属性值和username这个变量所代表的值是否相同。
3.
续查询了。
org.hibernate.criterion.Projections是 Projection 的实例工厂,我们通过调
用setProjection()应用Projections对象进行一个查询. 通过Criteria对象可以
使用setProjection的方法,该方法将进行一个Projections的查询,这里介绍一下
Projections类,我们可以使用org.hibernate.criterion.Projections的avg()
、rowCount()、count()、max()、min()、 countDistinct()等方法,再搭配
Criteria的setProjection()方法加入条件设定,对查询结果进行统计动作,例
如对查询结果的"age"作平均:
opt=admin[/url]
上面的程式将由Hibernate自动产生SQL的avg函数进行平均计算:
4.
也就是把这个查询结果当做是result这个参数,来构造一个新的pager
二进入个人通信录页面
(一)点击进入增加联系人界面
1.填写相应的信息,然后提交
(二)显示联系人
1.注意这里的一页显示多少记录数的功能
改变,那么我们就提交表单。注意,list="pager.pageSizeIndexs"是必须要有
的属性,用来显示下拉菜单中可供选择的值。
2.
而不是以链接来解析这些内容。这句话的意思就是当我们点击这个链接是,其
pageNo就发生变化,而这个变换体现在名为pageNo的下拉菜单中,同时,我们也
可以通过下拉菜单更改显示第几页。
3.return new Pager(pageSize, pageNo, rowCount, result);由于我们把查询
的结果当做是第四个参数构造Pager,所以我们直接使用
<s:iterator value="pager.resultList">来返回联系人,而pager这个属性出现
在AddressAction的父类PagerAction中。
三自定义拦截器
1.这里一定要注意,若<action/>没有引用任何一个拦截器,那么默认的
defaultStack会自动附加到<action/>中
2.如果我们要使用自己的拦截器,那么就要使用手工方式把拦截器加入进来。
如
详见http://lib.open-open.com/view/open1337756874027.html其中ActionInvocation 为
框架相同,这里不再赘述
一、首先我们进入主界面Welcome.jsp,我们看其中的个人通讯录选项
(一)
1.点击个人通讯录选项,请求提交给AddressAction类的init()方法,发现其中
有clearErrorsAndMessages方法,我们查看相应的API,
引用
Clears all errors and
messages. Useful for Continuations and other situations where you
might want to clear parts of the state on the same action.
这个函数对
messages. Useful for Continuations and other situations where you
might want to clear parts of the state on the same action.
于同一个Action类的继续使用以及清除该类部分状态是有用的。
(二)
public Pager findPagerByUsername(final String username, final int pageSize, final int pageNo) { Session session = getHibernateTemplate ().getSessionFactory().openSession(); // set query condition Criteria criteria = session.createCriteria (Address.class); criteria.add(Restrictions.eq("username", username)); // get total count int rowCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult ()).intValue(); criteria.setProjection(null); // get current page list int startIndex = pageSize * (pageNo - 1); criteria.addOrder(Order.asc("name")); criteria.setFirstResult(startIndex); criteria.setMaxResults(pageSize); List result = criteria.list(); session.close(); return new Pager(pageSize, pageNo, rowCount, result); }1Criteria是一种更加面向对象的查询语言
2Criteria criteria = session.createCriteria(Address.class)是根据给定的
映射类生成相应的criteria对象。
而criteria.add(Restrictions.eq("username", username))注意是判断
username这个属性名字给定的属性值和username这个变量所代表的值是否相同。
3.
int rowCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult ()).intValue(); criteria.setProjection(null);注意统计完以后要把条件设为null,方能开始新的查询,否则就带着这个条件继
续查询了。
org.hibernate.criterion.Projections是 Projection 的实例工厂,我们通过调
用setProjection()应用Projections对象进行一个查询. 通过Criteria对象可以
使用setProjection的方法,该方法将进行一个Projections的查询,这里介绍一下
Projections类,我们可以使用org.hibernate.criterion.Projections的avg()
、rowCount()、count()、max()、min()、 countDistinct()等方法,再搭配
Criteria的setProjection()方法加入条件设定,对查询结果进行统计动作,例
如对查询结果的"age"作平均:
Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.avg("age")); List users = criteria.list();详见[url]http://www.blogjava.net/jjshcc/archive/2010/08/16/329046.html?
opt=admin[/url]
上面的程式将由Hibernate自动产生SQL的avg函数进行平均计算:
4.
// get current page list这个就是分页的使用方法 int startIndex = pageSize * (pageNo - 1); criteria.addOrder(Order.asc("name"));//给查询结果加入一个排序顺序 criteria.setFirstResult(startIndex);//定义第一个返回的数据 criteria.setMaxResults(pageSize);//定义最大可以返回的数据 List result = criteria.list();//注意最后返回return new Pager(pageSize, pageNo, rowCount, result);
也就是把这个查询结果当做是result这个参数,来构造一个新的pager
二进入个人通信录页面
(一)点击进入增加联系人界面
1.填写相应的信息,然后提交
,<s:form name="form1" action="addressadd! insert.do" method="post">调用AddressAction的insert方法
public String insert() throws Exception { // 清除错误消息 clearErrorsAndMessages(); // 判断姓名是否已经存在 boolean b = this.getAddressDAO().isExist (super.getLoginUsername(), this.getName()); if (!b) { // 插入数据表 Address address = new Address(); address.setUsername(super.getLoginUsername()); address.setName(this.getName()); address.setSex(this.getSex()); address.setMobile(this.getMobile()); address.setEmail(this.getEmail()); address.setQq(this.getQq()); address.setCompany(this.getCompany()); address.setAddress(this.getAddress()); address.setPostcode(this.getPostcode()); this.getAddressDAO().insert(address); } // 取得缓存的分页参数 Pager pagerSession = (Pager) getSession (Constants.PAGER_ADDRESS); super.pageSize = pagerSession.getPageSize(); super.pageNo = pagerSession.getPageNo(); // 查询当前页的数据 super.pager = this.getAddressDAO ().findPagerByUsername(super .getLoginUsername(), super.pageSize, super.pageNo); if (!b) { // 保存成功信息 saveActionMessage ("address.message.add.success"); return Constants.LIST_KEY; } else { // 保存失败信息 saveActionError("address.message.add.failed"); return Constants.ADD_KEY; } }首先判断名字是否存在,这个和前面的判断类似,这里不再赘述。
(二)显示联系人
1.注意这里的一页显示多少记录数的功能
<s:select name="pageSize" key="pager.pageSize" list="pager.pageSizeIndexs" value="pager.pageSize" onchange="document.all.pageNo.value='1';document.all.form1.submit ();"/>这里form1就代表这个可以改变一页中显示联系人数量的表单,其中
onchange = document.all.form1.submit()代表如果一个下拉菜单中的属性值被
改变,那么我们就提交表单。注意,list="pager.pageSizeIndexs"是必须要有
的属性,用来显示下拉菜单中可供选择的值。
2.
<a href="javascript:document.all.pageNo.value='<s:property value="pager.firstPageNo" />';document.all.form1.submit();"><s:text name="pager.firstPageNo" /></a> <a href="javascript:document.all.pageNo.value='<s:property value="pager.prePageNo" />';document.all.form1.submit();"><s:text name="pager.prePageNo" /></a> <a href="javascript:document.all.pageNo.value='<s:property value="pager.nextPageNo" />';document.all.form1.submit();"><s:text name="pager.nextPageNo" /></a> <a href="javascript:document.all.pageNo.value='<s:property value="pager.lastPageNo" />';document.all.form1.submit();"><s:text name="pager.lastPageNo" /></a> <s:select name="pageNo" list="pager.pageNoIndexs" value="pager.pageNo" onchange="document.all.form1.submit();"/>这里的javascript:的前缀意思是告诉浏览器以javascript来解析里面的内容,
而不是以链接来解析这些内容。这句话的意思就是当我们点击这个链接是,其
pageNo就发生变化,而这个变换体现在名为pageNo的下拉菜单中,同时,我们也
可以通过下拉菜单更改显示第几页。
3.return new Pager(pageSize, pageNo, rowCount, result);由于我们把查询
的结果当做是第四个参数构造Pager,所以我们直接使用
<s:iterator value="pager.resultList">来返回联系人,而pager这个属性出现
在AddressAction的父类PagerAction中。
三自定义拦截器
1.这里一定要注意,若<action/>没有引用任何一个拦截器,那么默认的
defaultStack会自动附加到<action/>中
2.如果我们要使用自己的拦截器,那么就要使用手工方式把拦截器加入进来。
如
:<interceptors> <!-- 定义一个包含权限控制的拦截器栈 --> <interceptor name="authority" class="com.demo.struts2.common.AuthorizationInterceptor" /> <!-- 定义一个包含权限控制的拦截器栈 --> <interceptor-stack name="mydefault"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="authority" /> </interceptor-stack> </interceptors> <!-- 定义默认拦截器 --> <default-interceptor-ref name="mydefault" />3.如果我们要实现自定义拦截器,一般继承AbstractInterceptor抽象类
详见http://lib.open-open.com/view/open1337756874027.html其中ActionInvocation 为
引用
An ActionInvocation represents the execution
state of an Action. It holds the Interceptors and the Action instance.
By repeated re-entrant execution of the invoke() method, initially by
the ActionProxy, then by the Interceptors, the Interceptors are all
executed, and then the Action and the Result.
state of an Action. It holds the Interceptors and the Action instance.
By repeated re-entrant execution of the invoke() method, initially by
the ActionProxy, then by the Interceptors, the Interceptors are all
executed, and then the Action and the Result.
- MySSH2Test2.rar (9.9 MB)
- 下载次数: 2
发表评论
-
Spring的基于Annotation方式的Bean装配
2012-09-23 14:39 1197基于Annotation方式的Bean装配 一我的理解是Ann ... -
spring通过注解方式hibernate映射文件
2012-09-21 11:12 1039spring通过注解方式hibernate映射文件 先看如下代 ... -
struts2数据类型转换器
2012-09-19 15:31 813数据类型转换器 一为什么要使用转换器 首先struts2通过r ... -
用SSH2简单实现了用户注册登录删除功能
2012-09-08 22:19 3153第一次尝试把SSH2整合起来,这里记下编写当中遇到的问题和自己 ... -
开发者突击的配套Struts2SpringHibernate集成项目学习笔记1
2012-08-29 10:35 1171学习开发者突击的配套Struts2SpringHibernat ... -
【转】 hibernate映射文件之id详解
2012-08-26 09:17 564id 被映射的类必须声明对应数据库表主键字段。大多数类有一个J ... -
spring基础知识
2012-08-17 21:02 669spring基础知识 一控制反转IOC和依赖注入 首先这个控制 ... -
Hibernate QBC查询方式
2012-08-13 15:35 0Hibernate QBC查询方式 -
Hibernate数据库连接的设置及其配置文件的书写
2012-08-13 11:25 1106Hibernate数据库连接的设置及其配置文件的书写 首先Hi ... -
Hibernate体系结构学习笔记与心得
2012-08-13 10:04 676Hibernate体系结构 一核心接口: (一)、Sessio ... -
Hibernate工作原理浅析和持久化对象常用方法介绍
2012-08-11 12:43 934初学Hibernate,阅读了有关书籍,做了如下笔记和思考心得 ... -
初学Hibernate映射机制的学习笔记
2012-08-02 15:34 749初学hibernate ,做了下面 ... -
struts2项目无法正确启动Tomcat的问题学习笔记
2012-07-28 20:59 941struts2项目无法正确启动Tomcat的问题学习笔记 第 ... -
struts2自带项目showcase的Action Chaining学习笔记
2012-07-26 20:40 0struts2自带项目showcase的A ... -
struts2自带项目showcase的tags学习笔记
2012-07-26 20:31 724struts2自带项目showcase的tags学习笔记 第 ... -
struts2自带项目showcase的CRUD功能学习笔记
2012-07-23 17:00 0struts2自带项目showcase的CRUD功能学习笔记 ... -
struts2自带项目showcase的fileupload与filedownload功能学习笔记
2012-07-23 14:59 1084struts2自带项目showcase的fileupload功 ... -
struts2框架自带项目struts2-mailreader学习笔记
2012-07-17 21:24 1283struts2框架自带项目struts2-mailreader ... -
【转】Struts2的Action配置的各项默认值
2012-07-09 18:54 8181、Action配置的各项默认值 如果没有为action指 ... -
【转】Struts2中的OGNL表达式
2012-07-09 16:22 0转自http://blog.csdn.net/jady ...
相关推荐
Struts2SpringHibernate框架整合是Java Web开发中的经典组合,常用于构建大型的企业级应用。这个框架集成的主要目的是实现MVC(Model-View-Controller)设计模式,提高代码的可维护性和可扩展性。下面将详细阐述每个...
本文将深入探讨以"Struts2SpringHibernate人力资源管理系统.rar"为例,如何通过这三大框架的集成实现一个高效、稳定的人力资源管理解决方案。 首先,Struts2作为Action层框架,负责处理HTTP请求并调度业务逻辑。它...
在这个"Struts2SpringHibernate实现简单的添加,分页显示功能例子"中,开发者通过整合这三大框架,实现了基本的数据添加功能以及数据的分页显示。以下是对这个例子中的关键知识点的详细解释: 1. **Struts2**:作为...
本资源“传智播客视频struts2springhibernate ppt”提供了由知名教育机构传智播客制作的关于这三个框架的培训材料,旨在帮助学习者快速入门并深入理解这些技术。 1. **Struts2**:Struts2是一个基于MVC(Model-View...
这个"Struts1SpringHibernate实例"很可能是为了展示这三个框架如何协同工作,以实现一个完整的Web应用程序。下面将详细阐述这三个框架的主要功能和结合使用时的关键知识点。 Struts1是一个基于MVC设计模式的开源...
本文将详细介绍如何搭建一个基于Struts2、Spring和Hibernate的集成环境。 首先,我们来看如何进行Struts2与Spring的整合。Struts2作为控制器层,提供了强大的MVC架构支持,而Spring则是一个全面的轻量级应用框架,...
1. 添加依赖:首先在项目中引入Compass、Struts2、Spring和Hibernate的相应依赖库。 2. 配置Compass:在Spring配置文件中定义Compass的bean,包括设置数据源、索引路径、搜索引擎类型等。 3. 配置Hibernate:在...
Struts2.3.16.3升级到Struts2.5.12注意事项(必须) Spring 4.1.2升级到Spring 4.3.10注意事项(必须) hibernate 3升级到hibernate5.2.9注意事项(必须) 最新SSH升级必备
Struts2,Spring,Hibernate是Java Web开发中最为常见的3种框架,掌握这3种框架是每个Java Web开发人员的基本功。 然而,很多初学者在集成这3个框架的时候,总是会遇到各种各样的问题。 我在读大学刚刚学习SSH的...
为了实现Struts1与Spring的集成,首先需要创建一个Spring容器。Spring容器能够帮助我们管理业务逻辑层的Bean,并且可以自动装配这些Bean,减少手动实例化的繁琐工作。Spring容器的创建通常有多种方式,其中使用`...
在这个“基于Struts2 Spring Hibernate整合”的项目中,我们看到开发者使用了Maven作为构建工具,这使得依赖管理和项目构建变得更加规范和便捷。 1. **Struts2**:Struts2是一个开源的MVC框架,它继承了Struts1的...
这里我简单编写了一个Struts1 Spring Hibernate 整合例子,以后复习的时候方便查找复习
【权限管理系统Struts2+Spring+Hibernate整合升级版】是一个基于经典的Java开发框架组合——Struts2、Spring和Hibernate的高级应用。这个系统主要用于企业级的客户关系管理(CRM),并在此基础上进行了优化和增强,...
总的来说,"开发基于Struts SpringHibernate 的网上信息发布平台阶段五"涵盖了Java Web开发的诸多核心技能,从设计模式到具体的技术实现,都需要开发者具备扎实的基础和实践经验。在实际操作中,开发者应不断学习和...
开发基于Struts SpringHibernate 的网上信息发布平台阶段六
开发基于Struts SpringHibernate 的网上信息发布平台阶段二
这个"Struts1.x+Spring+Hibernate开发实例"是一个综合性的学习资料,旨在帮助开发者理解如何将这三个框架整合在一起,构建一个完整的Web应用程序。 Struts1.x是Apache软件基金会的开源MVC(Model-View-Controller)...
在本项目中,我们主要探讨的是使用Struts、Spring和Hibernate三大框架开发一个网上信息发布平台的第...通过对这些代码的学习和理解,你可以更深入地掌握如何在实际项目中整合和运用Struts、Spring和Hibernate三大框架。