struts2分页标签 jsp分页怎么弄啊??

Struts2+JSP分页源代码 图文详细讲解_Java源代码_Java学习网
环境是JDK1.6+mysql5.0+jboss4.0+struts 2.0.11
已经实现上一版没实现的功能。
首先来看UML图,为了简洁性,其中的setter & getter并没有标出。
接下来是各类代码
public classShowActionextendsActionSupport{
privateintcurrentPage = 1;
privateinttotalP
privatebooleanhasNext =
privatebooleanhasPre =
private ArrayList pageContentL
private ArrayList&PageIndex& indexL
private PageR
public String execute(){
returnSUCCESS;
privatevoid init(){
pr = new PageRetrieval(currentPage);
setPageContentList(pr.getPageContentList());
setIndexList(pr.getIndexList());
setHasNext(pr.getHasNext());
setHasPre(pr.getHasPre());
setTotalPages(pr.getTotalPages());
//other getters and setters
publicclass PageRetrieval {
private PageI
public PageRetrieval(int currentPage){
pi = new PageInformationFactory().create(currentPage);
publicint getTotalPages(){
returnpi.getPti().getTotalPages();
//other getters and setters
publicclass PageInformationFactory {
private DatabaseServices dataS
public PageInformationFactory(){
dataServ = MyDatabaseServices.getInstance();
public PageInformation create(int currentPage){
PageInformation pi = new PageInformation();
PageTotalInfo pti = getNewPageTotalInfo();
pi.setPti(pti);
if(currentPage & pti.getTotalPages()){
pi.setHasNext(true);
if(currentPage !=1){
pi.setHasPre(true);
} pi.setPageContentList(((MyDatabaseServices)dataServ).getPageContent(currentPage, pti.getPageSize()));
ArrayList&PageIndex& indexTemp = getIndexList(currentPage,pti.getTotalPages());
pi.setIndexList(indexTemp);
private PageTotalInfo getNewPageTotalInfo(){
int pageSize = 20;
int totalRows = ((MyDatabaseServices)dataServ).getRowCount();
int totalPages = (totalRows + pageSize-1)/pageS
returnnew PageTotalInfo(pageSize,totalPages,totalRows);
private ArrayList&PageIndex& getIndexList(int currentPage,int totalPages){
int up = 0;
if((currentPage+20)&=totalPages){
up = currentPage+20;
else {up = totalPages+1;}
ArrayList&PageIndex& result = new ArrayList&PageIndex&();
for(int i=currentPi& i++){
PageIndex temp = new PageIndex(i);
result.add(temp);
publicclass PageInformation {
privateintcurrentP
privatebooleanhasNext =
privatebooleanhasPre =
private ArrayList pageContentL
private ArrayList&PageIndex& indexL
private PageTotalI
//other getters and setters
publicclass MyDatabaseServices implements DatabaseServices{
private DataS
private InitialC
private PreparedS
private ResultS
privatestatic MyDatabaseServices dgs = new MyDatabaseServices();
private MyDatabaseServices(){//use singleton pattern, so the constructor is private
ic = new InitialContext ();
ds = (DataSource)ic.lookup(&java:jdbc/jsp&);//get database source
}catch(NamingException e){
e.printStackTrace();
public Connection getConnection(){
returnds.getConnection();
}catch(SQLException e){
e.printStackTrace();
public void closeConnection(ResultSet rs,PreparedStatement ps,Connection conn){
if(rs!=null){
rs.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
}catch(SQLException e ){
e.printStackTrace();
public ArrayList&User& getPageContent(int currentPage,int pageSize){
ArrayList&User& list=new ArrayList&User&();
conn = getConnection();
ps = conn.prepareStatement(&Select * FROM jsptest LIMIT ?,?&);
int temp = (currentPage-1)*20;
ps.setInt(1, temp);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
while (rs.next()){
User user = new User();
user.setId(rs.getString(1));
user.setName(rs.getString(2));
list.add(user);
}catch(SQLException e){
e.printStackTrace();
dgs.closeConnection(rs, ps, conn);
publicint getRowCount(){
conn = getConnection();
ps = conn.prepareStatement(&Select * FROM jsptest&);
rs = ps.executeQuery();
rs.last();
int result = rs.getRow();
rs.first();
}catch(SQLException e){
e.printStackTrace();
dgs.closeConnection(rs, ps, conn);
publicstaticsynchronized MyDatabaseServices getInstance()//get the sigleton instance
if(null==dgs){
dgs= new MyDatabaseServices();
PageIndex 和PageTotalInfo 只要对照UML图加上set和get方法就可以了。
代码可能有点乱,对照UML图看吧。
如果要重用,只要改变JSP页面,以及下面的MyDatabaseServices的具体实现,还有就是把USER替换成你需要显示的数据。
最后以下是JSP页面代码。
&%@ page language=&java& contentType=&text/ charset=ISO-8859-1&
pageEncoding=&ISO-8859-1&%&
&%@ taglib prefix=&s& uri=&/struts-tags& %&
&meta http-equiv=&Content-Type& content=&text/ charset=ISO-8859-1&&
&title&Insert title here&/title&
&s:form action=&ShowAction& method=&GET&&
&h1&Welcome&/h1&&BR&
&h1&CurrentPage &s:property value=&currentPage&/&&/h1&
&!--show items of this page--&
&s:iterator value=&pageContentList& status=&status&&
&s:property value=&id&/&
&s:property value=&name&/&
&/s:iterator&
&!--define the url of the previous page and next page--&
&s:url id=&url_pre& value=&ShowAction.action&&
&s:param name=&currentPage& value=&currentPage-1&&&/s:param&
&s:url id=&url_next& value=&ShowAction.action&&
&s:param name=&currentPage& value=&currentPage+1&&&/s:param&
&s:url id=&url_first& value=&ShowAction.action&&
&s:param name=&currentPage& value=&1&&&/s:param&
&s:url id=&url_last& value=&ShowAction.action&&
&s:param name=&currentPage& value=&totalPages&&&/s:param&
&!-- use url defined above --&
&s:a href =&%{url_first}&&First Page&/s:a&
&s:if test=&hasPre&&
&s:a href=&%{url_pre}&&Pre&/s:a&
&s:iterator value=&indexList& status=&status&&
&s:url id=&url& value=&ShowAction.action&&
&!-- pass the currentPage parameter --&
&s:param name=&currentPage& value=&indexNumber&&&/s:param&
&s:a href=&%{url}&&&s:property value=&indexNumber&/& &/s:a&
&/s:iterator&
&s:if test=&hasNext&&
&s:a href=&%{url_next}&&Next&/s:a&
&s:a href =&%{url_last}&&Last Page&/s:a&
/* * JAVA小游戏-拼图 我做的第一个小游戏 * Cell类是继承的按钮...
//需求分析:写一个较为严谨的学生选课系统,实现学生可以选...
//经典案例:用户注册与登录系统 //用户注册/登陆,将用户注册...
// 项目目标:建立员工管理系统第一个版本。 // 实现图形用户界...
JAVA操作文件复制、移动和删除源代码(JAVA中文网整理发布) http...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
最近更新的内容
常用在线小工具:转载时请以超链接形式标明文章原始出处和作者信息及本声明
求ssh框架搭建ssh框架中实现MySQL数据库在jsp页面分页的源代码
每页显示10条
网友解答:
自己写个分页器嘛
太长自己写吧
struts2遍历,如果参数是在stack value中 如:参数为users
s:iterator value="users" var="user"
s:property value="name" /
/s:iteraotr
参数如在Actioncontext内,取时需加"#",如:value="#users"
历史上的今天:
引用地址:jsp里面做分页好呢还是action里做分页好??
jsp里面做分页好呢还是action里做分页好??
09-10-15 &匿名提问
用楼上的方法ID似乎没有传下去哟 报错信息: HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: id to load is required for loading org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) root cause java.lang.IllegalArgumentException: id to load is required for loading org.hibernate.event.LoadEvent. &init&(LoadEvent.java:51) org.hibernate.event.LoadEvent. &init&(LoadEvent.java:33) org.hibernate.impl.SessionImpl.get(SessionImpl.java:812) org.hibernate.impl.SessionImpl.get(SessionImpl.java:808) org.springframework.orm.hibernate3.HibernateTemplate$1.doInHibernate(HibernateTemplate.java:483) org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374) org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:477) org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:471) dao.SpringDAO.get(SpringDAO.java:15) fac.ImplementFac.getStudentId(ImplementFac.java:24) mon.Updatebase.get(Updatebase.java:38) web.action.Update.execute(Update.java:80) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling
请登录后再发表评论!
第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。 ,,,,,,,第一次查询时将所有条件拼接为sql语句的where部分,保存在session中,翻页时直接从session中取出查询条件。
请登录后再发表评论!&&Struts2+Hibernate3+Spring三大框架技术实现MySQL数据分页本项目采用了Struts2,Hibernate3,Spring三框架技术来实现对MySQL中的数据进行分页,在本机上面测试通过了,特此分享由编辑于 23:02:45由编辑于 9:26:511个牛币请下载代码后再发表评论//SSH/SSH/.classpath/SSH/.myeclipse/SSH/.mymetadata/SSH/.project/SSH/.settings/SSH/.settings/.jsdtscope/SSH/.settings/org.eclipse.jdt.core.prefs/SSH/.settings/org.eclipse.wst.jsdt.ui.superType.container/SSH/.settings/org.eclipse.wst.jsdt.ui.superType.name/SSH/src/SSH/src/ssh/SSH/src/ssh/DAOImpl/SSH/src/ssh/action/SSH/src/ssh/base精精精原原精原原原最热搜索分享话题编程语言基础Web开发数据库开发客户端开发脚本工具游戏开发服务器软硬件开源组件类库相关分享原精原精原精原原原原原原精最近下载暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友

我要回帖

更多关于 struts2分页标签 的文章

 

随机推荐