怎么使用struts2标签的使用来实现论坛的分页

trackbacks-0
参考网址1:
参考网址2:/
资料部分借鉴:
上节课,我们完成了一个SSH整合的CRUD操作案例,并且完善了其国际化以及校验等内容,这节课,我们继续加以完善,我们知道,当我们查询数据库的内容过多的时候,显示在页面上的内容就比较冗长,所以分页的实现就显的十分有必要了。分页功能的实现是必不可少的,掌握一到两种分页技术在在实际开发前是有必要的,前两天浏览博客的时候看到了一个程序员的博文写的一个分页功能的实现非常好,在这里,分享给大家。
在讲解分页功能实现之前,大家必须对分页有一定的了解,知道分页的几个要素:总记录数,每页显示数,共几页,当前页等。
在上个例子的基础上我们开始完善我们的程序。
1.首先我们先新建立一个接口MemberDao.java,把所需要用到的方法列出来:
package&cn.zbvc.
import&java.util.L
import&cn.zbvc.bean.U
public&interface&MemberDao&{
&*&分页查询
&*&@param&hql&&查询条件
&*&@param&offset&&开始记录
&*&@param&length&&一次查询几条记录
&*&@return&查询的记录集合
public&List&User&&queryForPage(final&String&hql,final&int&offset,final&int&length);
&*&查询所有的记录数
&*&@param&hql&查询条件
&*&@return&总记录数
public&int&getAllRowCount(String&hql);
2.然后我们创建其实现类:MemberDaoImpl.java
package&cn.zbvc.dao.
import&java.util.L
import&org.hibernate.Q
import&org.hibernate.S
import&org.springframework.orm.hibernate3.support.HibernateDaoS
import&cn.zbvc.bean.U
import&cn.zbvc.dao.MemberD
public&class&MemberDaoImpl&extends&HibernateDaoSupport&implements&MemberDao&{
&*&查询所有的记录数
&*&@param&hql&查询条件
&*&@return&总记录数
public&int&getAllRowCount(String&hql)&{
return&this.getHibernateTemplate().find(hql).size();
&*&分页查询
&*&@param&hql&&查询条件
&*&@param&offset&&开始记录
&*&@param&length&&一次查询几条记录
&*&@return&查询的记录集合
@SuppressWarnings("unchecked")
public&List&User&&queryForPage(final&String&hql,&final&int&offset,&final&int&length)&{
Session&session&=&this.getSession();
Query&q&=&session.createQuery(hql);
q.setFirstResult(offset);
q.setMaxResults(length);
List&User&&list&=&q.list();
System.out.println(list.size());
session.close();
大家可以看到,我们一共定义了两个方法,第一个方式是获取数据库表的总记录数,第二个方法是获取我们想要获取的某一页的数据集合,传递的三个参数分别是:查询条件、开始的记录、结束的记录。
细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate支持的类,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。
3.然后我们需要建立一个获取分页信息的pageBean.java:
package&cn.zbvc.
import&java.util.L
import&cn.zbvc.bean.U
public&class&PageBean&{
private&List&User&&&&//要返回的某一页的记录列表
private&int&allR&//总记录数
private&int&totalP&&//总页数
private&int&currentP&&//当前页
private&int&pageS&&//每页的记录数
private&boolean&isFirstP&&//是否为当前第一页
private&boolean&isLastP&&//是否为最后一页
private&boolean&hasPreviousP&&//是否有前一页
private&boolean&hasNextP&&//是否有下一页
Set&and&get方法
PageBean中的具体方法:
&*&初始化分页信息
public&void&init(){
this.isFirstPage&=&isFirstP
this.isLastPage&=&isLastP
this.hasPreviousPage&=&hasPreviousP
this.hasNextPage&=&hasNextP
&*&计算总页数&&静态方法
&*&@param&pageSize&&每页的记录数
&*&@param&allRow&&总记录数
&*&@return&总页数
public&static&int&countTatalPage(final&int&pageSize,final&int&allRow){
int&toalPage&=&allRow&%&pageSize&==&0&?&allRow/pageSize&:&allRow/pageSize&+&1;
return&toalP
&*&计算当前页开始的记录
&*&@param&pageSize&每页记录数
&*&@param&currentPage&当前第几页
&*&@return&当前页开始记录号
public&static&int&countOffset(final&int&pageSize,final&int&currentPage){
final&int&offset&=&pageSize&*&(currentPage&-&1);
&*&计算当前页,若为0或者请求的URL中没有“?page&=&”则用1代替
&*&@param&page&传入的参数(可能为空,即0&&则返回1)
&*&@return
public&static&int&countCurrentPage(int&page){
final&int&curpage&=&(page&==&0&?&1&:&page);
4.业务逻辑层的实现:我们现在就只操作User,现在我们在UserService中定义一个方法:
&*&分页查询&&
&*&@param&pageSize&&每页显示多少记录
&*&@param&currentPage&当前页
&*&@return&封装了分页信息的bean
public&PageBean&queryForPage(int&pageSize,int&page);
5.使用UserServiceImpl实现这个具体方法:
&*&分页查询&&
&*&@param&pageSize&&每页显示多少记录
&*&@param&currentPage&当前页
&*&@return&封装了分页信息的bean
public&PageBean&queryForPage(int&pageSize,&int&page)&{
final&String&hql&=&"from&User&user&order&by&user.id";&//查询语句
int&allRow&=&memberDao.getAllRowCount(hql);&&//总记录数
int&totalPage&=&PageBean.countTatalPage(pageSize,&allRow);&//总页数
final&int&offset&=&PageBean.countOffset(pageSize,&page);&//当前页开始记录
final&int&length&=&pageS&//&每页记录数
final&int&currentPage&=&PageBean.countCurrentPage(page);&//&当前页
List&list&=&memberDao.queryForPage(hql,&offset,&length);&//
//把分页信息保存到Bean当中
PageBean&pageBean&&=&new&PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return&pageB
6.然后我们为了不影响上一个例子,我们新创建一个ListUserAction2.java:
package&cn.zbvc.action.
import&java.util.L
import&com.opensymphony.xwork2.ActionS
import&cn.zbvc.bean.U
import&cn.zbvc.service.UserS
import&cn.zbvc.util.PageB
public&class&ListUserAction2&extends&ActionSupport&{
private&UserService&//通过Spring创建业务层对象&&使用set方法依赖注入
private&PageBean&pageB&//封装了分页信息和数据内容的pageBean
private&List&User&&listU//用于储存pageBean当中被封装的User信息
private&int&page&=&1;&//表示从网页中返回的当前页的值&&默认为1&表示默认显示第一页内容
public&int&getPage()&{
public&void&setPage(int&page)&{
this.page&=&
public&List&User&&getListUser()&{
return&listU
public&void&setListUser(List&User&&listUser)&{
this.listUser&=&listU
public&PageBean&getPageBean()&{
return&pageB
public&void&setPageBean(PageBean&pageBean)&{
this.pageBean&=&pageB
public&void&setService(UserService&service)&{
this.service&=&
public&String&execute()throws&Exception{
this.pageBean&=&service.queryForPage(5,&page);//获取封装了分页信息和数据的pageBean
this.listUser&=&this.pageBean.getList();&//获取数据
return&SUCCESS;
7.配置applicationContext.xml和struts.xml的相关信息,这里省略了。
8.在listUser2.jsp页面中添加分页内容:
&s:iterator&value="pageBean"&
&&&&&&&&&tr&
&&&&&&&&&&td&colspan="6"&align="center"&bgcolor="#5BA8DE"&
&&&&&&&&&共&s:property&value="allRow"/&条记录&&&&
&&&&&&&&&共&s:property&value="totalPage"/&页&&&&
&&&&&&&&&当前第&s:property&value="currentPage"/&页&br&
&&&&&&&&&&s:if&test="%{currentPage&==&1}"&
&&&&&&&&&&&第一页&&上一页
&&&&&&&&&&/s:if&
&&&&&&&&&&!--&currentPage为当前页&--&
&&&&&&&&&&s:else&
&&&&&&&&&&&&a&href="listUser2.action?page=1"&第一页&/a&
&&&&&&&&&&&&a&href="listUser2.action?page=&s:property&value="%{currentPage-1}"/&"&上一页&/a&
&&&&&&&&&&/s:else&
&&&&&&&&&&s:if&test="%{currentPage&!=&totalPage}"&
&&&&&&&&&&a&href="listUser2.action?page=&s:property&value="%{currentPage+1}"/&"&下一页&/a&
&&&&&&&&&&a&href="listUser2.action?page=&s:property&value="totalPage"/&"&最后一页&/a&
&&&&&&&&&&&&&/s:if&
&&&&&&&&&&s:else&
&&&&&&&&&下一页&&最后一页
&&&&&&&&&&/s:else&
&&&&&&&&&&/td&
&&&&&&&&&/tr&
&/s:iterator&
9.查看效果:
10.思考总结
关于分页功能实现,应该是有有很多种解决方法,我介绍的这种解决方案是为了给大家一个
范例,让大家明白分页功能实现的原理,其中,大部分的内容借鉴了之前提到的网址。接下来的时间,我会继续学习关于分页功能的其它实现方式,然后分享给大家,另外,还会继续的整理SSH的整合。
阅读(6849)
&re: SSH基础上分页功能的实现
你好,我从网上查的方法跟你的差不多,可是实现不了呢,你的struts.xml是怎么配置的啊。。&&&&&&
&re: SSH基础上分页功能的实现
请问第8步中JSP代码添加到《Struts2.2+Hibernate3.3+Spring2.5.6整合 一个简单的CRUD案例》中listUser.jsp中哪儿?怎么添加?初学者请见谅。&&&&&&
&re: SSH基础上分页功能的实现[未登录]
不知道Struts怎么配置&&&&&&
&re: SSH基础上分页功能的实现[未登录]
@crystal太好配置了百度&&&&&&
&re: SSH基础上分页功能的实现
你的struts.xml是怎么配置的?&&&&&&
&re: SSH基础上分页功能的实现
struts是怎么配置的&&&&&&
25262728293031123456789101112131415161718192021222324252627282930311234QHJavaEE 基于struts2技术而实现的分页功能,主要用来学习交流的 Develop 238万源代码下载-
&文件名称: QHJavaEE
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 562 KB
&&上传时间:
&&下载次数: 2
&&提 供 者:
&详细说明:基于struts2技术而实现的分页功能,主要用来学习交流的-Achieved based on struts2 paging technology
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&QHJavaEE\.classpath&&........\.mymetadata&&........\.mystrutsdata&&........\.project&&........\.settings\.jsdtscope&&........\.........\org.eclipse.jdt.core.prefs&&........\.........\org.eclipse.wst.jsdt.ui.superType.container&&........\.........\org.eclipse.wst.jsdt.ui.superType.name&&........\DBConnectionManager.log&&........\javaee\book\CVS\Entries&&........\......\....\...\Repository&&........\......\....\...\Root&&........\......\....\Edit.jsp&&........\......\....\List.jsp&&........\......\....new\Edit.jsp&&........\......\.......\List.jsp&&........\......\HelloWorld.jsp&&........\......\index.jsp&&........\......\js\flyDatePicker\calendar.js&&........\......\..\.............\config.js&&........\......\..\.............\CVS\Entries&&........\......\..\.............\...\Entries.Log&&........\......\..\.............\...\Repository&&........\......\..\.............\...\Root&&........\......\..\.............\lang\CVS\Entries&&........\......\..\.............\....\...\Repository&&........\......\..\.............\....\...\Root&&........\......\..\.............\....\en.js&&........\......\..\.............\....\zh-cn.js&&........\......\..\.............\....\zh-tw.js&&........\......\..\.............\My97DatePicker.htm&&........\......\..\.............\skin\CVS\Entries&&........\......\..\.............\....\...\Repository&&........\......\..\.............\....\...\Root&&........\......\..\.............\....\datePicker.gif&&........\......\..\.............\....\.efault\CVS\Entries&&........\......\..\.............\....\.......\...\Repository&&........\......\..\.............\....\.......\...\Root&&........\......\..\.............\....\.......\datepicker.css&&........\......\..\.............\....\.......\img.gif&&........\......\..\.............\....\WdatePicker.css&&........\......\..\.............\....\whyGreen\bg.jpg&&........\......\..\.............\....\........\CVS\Entries&&........\......\..\.............\....\........\...\Repository&&........\......\..\.............\....\........\...\Root&&........\......\..\.............\....\........\datepicker.css&&........\......\..\.............\....\........\img.gif&&........\......\..\.............\WdatePicker.js&&........\......\login\login.jsp&&........\......\.....\Loginresult.jsp&&........\......\META-INF\MANIFEST.MF&&........\......\operand\negative.jsp&&........\......\.......\positive.jsp&&........\......\.......\sum.jsp&&........\......\product\Edit.jsp&&........\......\.......\List.jsp&&........\......\student\StuReg.jsp&&........\......\test.jsp&&........\......\WEB-INF\classes\globalMessages_en_US.properties&&........\......\.......\.......\globalMessages_zh_CN.properties&&........\......\.......\.......\qh\action\BookAction-Store-validation.xml&&........\......\.......\.......\..\......\BookAction.class&&........\......\.......\.......\..\......\BookNewAction.class&&........\......\.......\.......\..\......\EntryAction.class&&........\......\.......\.......\..\......\globalMessages_zh_CN.properties&&........\......\.......\.......\..\......\HelloWorld.class&&........\......\.......\.......\..\......\LoginAction-DoLogin-validation.xml&&........\......\.......\.......\..\......\LoginAction.class&&........\......\.......\.......\..\......\ProdcutAction.class&&........\......\.......\.......\..\......\SumAction.class&&........\......\.......\.......\..\......\UITagExampleAction$Language.class&&........\......\.......\.......\..\......\UITagExampleAction$VehicalSpecific.class&&........\......\.......\.......\..\......\UITagExampleAction$VehicalType.class&&........\......\.......\.......\..\......\UITagExampleAction.class&&........\......\.......\.......\..\dao\BookDao.class&&........\......\.......\.......\..\...\impl\BookDaoImpl.class&&........\......\.......\.......\..\...\....\BookDaoImplNew.class&&........\......\.......\.......\..\...\....\ProductDaoImpl.class&&........\......\.......\.......\..\filter\SetCharacterEncodingFilter.class&&........\......\.......\.......\..\po\BookPO.class&&........\......\.......\.......\..\..\ProductPO.class&&........\......\.......\.......\..\..\StudentPO.class&&........\......\.......\.......\..\..\UserPO.class&&........\......\.......\.......\..\util\db\Constants.class&&........\......\.......\.......\..\....\..\db.properties&&........\......\.......\.......\..\....\..\DBConnectionManager$DBConnectionPool.class&&........\......\.......\.......\..\....\..\DBConnectionManager.class&&........\......\.......\.......\..\....\..\DbTrans.class&&........\......\.......\.......\..\....\..\Pager.class&&........\......\.......\.......\struts.properties&&........\......\.......\.......\struts.xml&&........\......\.......\.......\test\BookDaoImplNewTest.class&&........\......\.......\.......\....\ProductDaoImplTest.class&&........\......\.......\.......\....\ProductDaoImplTest2.class&&........\......\.......\lib\mysql-connector-java-5.0.3-bin.jar&&........\......\.......\web.xml&&........\src\globalMessages_en_US.properties&&........\...\globalMessages_zh_CN.properties&&........\...\qh\action\BookAction-Store-validation.xml&&........\...\..\......\BookAction.java
&输入关键字,在本站238万海量源码库中尽情搜索:Struts2+Hibernate实现数据分页的方法
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Struts2+Hibernate实现数据分页的方法,结合实例形式分析了Struts2结合Hibernate实现数据分页的原理,步骤与相关实现代码,需要的朋友可以参考下
本文实例讲述了Struts2+Hibernate实现数据分页的方法。分享给大家供大家参考,具体如下:
1.用Hibernate实现分页技术:
* 使用hql语句进行分页查询
* @param hql 需要查询的hql语句
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
@SuppressWarnings("unchecked")
public List findByPage(final String hql,
final int offset, final int pageSize)
//通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
//实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
//执行Hibernate分页查询
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
// 获取总记录数
public int getRows(String hql) {
return getHibernateTemplate().find(hql).size();
2.在Action里调用Hibernate实现分页技术的方法,并跳转到显示界面:
@SuppressWarnings("unchecked")
public String paging() {
String hql = "from Income"; // 分页的数据表
int pageSize = 3; // 每页显示记录的条数
int allRows = service.getRows(hql); // 记录总数
int allPage = 0; // 总页数
int offset = getPage() + 1; // 第一条记录的索引
/*if (rows % size != 0) {
pageSize = rows / size + 1;
pageSize = rows /
allPage = (allRows - 1) / pageSize + 1; // 计算总页数
List&Income& income = service.findByPage(hql, (offset-1)*pageSize, pageSize);
request.setAttribute("allPage", allPage);
request.setAttribute("offset", offset);
request.setAttribute("income", income);
return "paging";
3.struts.xml配置:
&action name="income"
class="com.xqh.action.IncomeAction"&
&!-- 为两个逻辑视图配置视图页面 --&
&result name="error"&/error.jsp&/result&
&result name="paging"&/income/income_list.jsp&/result&
&result name="update"&/income/income_edit.jsp&/result&
4.显示界面income_list.jsp
&%@ page language="java" pageEncoding="GBK"%&
&%@ taglib prefix="fmt" uri="/jsp/jstl/fmt" %&
&%@ taglib prefix="s" uri="/struts-tags" %&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&title&收入列表&/title&
&meta http-equiv="pragma" content="no-cache"&
&meta http-equiv="cache-control" content="no-cache"&
&meta http-equiv="expires" content="0"&
&meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my page"&
&link rel="stylesheet" type="text/css" href="../images/styles.css"&
&div class="div1"&
&table width="100%" cellpadding="0" cellspacing="0" border="0"
align="center"&
&td class="td_title1"&
·当前位置:收入管理&&查看收入
&td bgcolor="#FFFFFF" height="50"&
&table border="1" align="center" width="700" cellpadding="1"
cellspacing="1" bgcolor="#036500" bordercolor="#FFFFF"&
&tr bgcolor="#FFFFFF"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&td class="tb_tl" align="center"&
&s:iterator value="#request.income"&
&tr bgcolor="#FFFFFF"&
&td align="center"&&s:property value="id"/&&/td&
&td align="center"&&s:date name="date" format="yyyy-MM-dd"/&&/td&
&td align="center"&&s:property value="style"/&&/td&
&td align="center"&&s:property value="money"/&&/td&
&td align="center"&&s:property value="project"/&&/td&
&td align="center"&&s:property value="source"/&&/td&
&td align="center"&&s:property value="personnel"/&&/td&
&td align="center"&&s:property value="remarks"/&&/td&
&td align="center"&
&a href="javascript:if(confirm('确定要删除${id}吗?'))location='income!del?id=${id}'"&删除&/a&
&a href="javascript:if(confirm('确定要修改${id}吗?'))location='income!updateTo?id=${id}'"&修改&/a&
&/s:iterator&
总共有${allPage}页,
当前是第${offset}页
&a href="income!paging?page=0"&&font size="2" color="blue"&首页&/font&&/a&
&a href="javascript:if(${offset}&1)location='income!paging?page=${page-1}'"&&font size="2" color="red"&上一页&/font&&/a&
&a href="javascript:if(${offset}&${allPage})location='income!paging?page=${page+1}'"&&font size="2" color="red"&下一页&/font&&/a&
&a href="income!paging?page=${allPage-1}"&&font size="2" color="blue"&末页&/font&&/a&
5.分页结果:
本文章未提供底层数据库中的实现,但只要掌握分页原理,相信这问题不大。具体分页原理可参照前面一篇:《》
希望本文所述对大家基于Hibernate框架的Java程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具君,已阅读到文档的结尾了呢~~
一种基于struts2框架的Web分页模型的设计与实现基于,分页,框架,框架与,设计与实现,Web,web,分页框架,分页模型,模型与
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一种基于struts2框架的Web分页模型的设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口struts2实现分页
[问题点数:20分,结帖人zhouren1314]
struts2实现分页
[问题点数:20分,结帖人zhouren1314]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 struts2标签的使用 的文章

 

随机推荐