- 浏览: 75013 次
- 性别:
- 来自: 贵阳
文章分类
最新评论
-
ccy_qty:
博主,我在安装配置数据节点时,就是这一步./scripts/m ...
MySQL Cluster 7.3.7+CentOS7集群配置入门 MySQL双管理节点配置入门 -
hollo:
大神,sql节点的my.cnf可以贴出来不,我这里配置后,sq ...
MySQL Cluster 7.3.7+CentOS7集群配置入门 MySQL双管理节点配置入门 -
vb2005xu:
yum -y install autoconf // 安装此包 ...
MySQL Cluster 7.3.7+CentOS7集群配置入门 MySQL双管理节点配置入门 -
远方_张涛:
大神,太牛逼啦,谢谢大神,我配了几天都配不通,多亏大神的详细记 ...
MySQL Cluster 7.3.7+CentOS7集群配置入门 MySQL双管理节点配置入门 -
宛丘001:
这个不错,正需要
div+css分页条
由于项目中分页风格多样化,而分页又是项目中必不可少的,为统一项目分页风格,在上次封装的分页的组件找不到的的情况下,重新封装了一下分页组件,特意分享给大家,也防止再次丢失!
1.分页html/CSS代码及素材准备
请参考我的博客《div+css分页条》
http://wilr.iteye.com/blog/1208045
2.分页组件实体bean类
package wilr.utils.paging.domain; import java.io.Serializable; import java.util.List; /** * @project paging * @path wilr.utils.paging.domain * @desc SSH版通用分页标签 * @author Wilr * @QQ:545881075 * @time 2012-2-28 上午12:01:18 */ public class Page implements Serializable { private static final long serialVersionUID = 1L; /** * 每页显示条数 默认显示10条 */ private Integer pageSize = 10; /** * 总条数 */ private Integer totalCount = 0; /** * 总页数 */ private Integer totalPage = 0; /** * 当前页 */ private Integer currentPage = 1; /** * 起始索引 */ private Integer startIndex = 0; /** * 分页条件 */ private String condition; /** * 查询的返回值 */ private List<?> objList; /** * 排序 */ private String orderBy; /** * 查询对象名称或表名/或查询语句 */ private String objName; /** * 需要查询的字段 */ private String queryField; public Page(Integer totalCount,List<?> objList, Integer currentPage) { super(); this.totalCount = totalCount; this.objList = objList; this.currentPage = currentPage; } public Page(Integer pageSize, String condition, List<?> objList, String orderBy, String objName) { super(); this.pageSize = pageSize; this.condition = condition; this.objList = objList; this.orderBy = orderBy; this.objName = objName; } public Page(Integer pageSize, String objName) { super(); this.pageSize = pageSize; this.objName = objName; } public Page(){} public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalCount() { return totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; } public Integer getTotalPage() { totalPage=totalCount % pageSize == 0 ? (totalCount / pageSize): (totalCount / pageSize + 1); return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { if (currentPage <= 0) currentPage = 1; this.currentPage = currentPage; } public Integer getStartIndex() { startIndex=this.pageSize * (this.currentPage - 1); return startIndex; } public void setStartIndex(Integer startIndex) { this.startIndex =startIndex; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } public List<?> getObjList() { return objList; } public void setObjList(List<?> objList) { this.objList = objList; } public String getOrderBy() { return orderBy; } public void setOrderBy(String orderBy) { this.orderBy = orderBy; } public String getObjName() { return objName; } public void setObjName(String objName) { this.objName = objName; } public String getQueryField() { return queryField; } public void setQueryField(String queryField) { this.queryField = queryField; } }
3.标签实现类
package wilr.utils.paging.taglib; import java.io.Serializable; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import wilr.utils.paging.domain.Page; /** * @project paging * @path wilr.utils.paging.taglib * @desc 分页标签 * @author Wilr * @QQ:545881075 * @time 2012-2-28 上午12:02:21 */ public class PagingTag extends TagSupport implements Serializable { private static final long serialVersionUID = 1L; /** * 是否显示改变页数下拉框 */ private boolean skipCount = true; /** * 是否显示跳页输入框 */ private boolean jumpText = true; /** * 是否显示上/下一页按钮 */ private boolean prevPage = true; /** * 是否显示首/尾页按钮 */ private boolean startPage = true; /** * 是否显示遍历页 */ private boolean forPage = true; /** * 是否显示当前页和总页数 */ private boolean showCurAndSum = true; /** * 是否启用刷新 */ private boolean refresh=true; /** * 分页实体对象 */ private Page page; /** *请求URL */ private String url; public boolean isSkipCount() { return skipCount; } public void setSkipCount(boolean skipCount) { this.skipCount = skipCount; } public boolean isJumpText() { return jumpText; } public void setJumpText(boolean jumpText) { this.jumpText = jumpText; } public boolean isPrevPage() { return prevPage; } public void setPrevPage(boolean prevPage) { this.prevPage = prevPage; } public boolean isStartPage() { return startPage; } public void setStartPage(boolean startPage) { this.startPage = startPage; } public boolean isForPage() { return forPage; } public void setForPage(boolean forPage) { this.forPage = forPage; } public boolean isShowCurAndSum() { return showCurAndSum; } public void setShowCurAndSum(boolean showCurAndSum) { this.showCurAndSum = showCurAndSum; } public boolean isRefresh() { return refresh; } public void setRefresh(boolean refresh) { this.refresh = refresh; } public Page getPage() { return page; } public void setPage(Page page) { this.page = page; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } /** * 输出分页标签 */ public int doStartTag() throws JspException { try { if(page!=null){ long currentPage=page.getCurrentPage(); //获得当前页面 long totalPage=page.getTotalPage(); //获得总页数 StringBuilder builder=new StringBuilder("<script type='text/javascript'>"); builder.append("function loadPage(pagenum){var url='"+url+"?page.currentPage='+pagenum;self.location.href=url}"); builder.append("function jumpPage(){var jumpPageNum=document.getElementById('jump_page_num').value;"); builder.append("if(jumpPageNum.length<=0){alert('请填写要跳转的页面值!');return false;}"); builder.append("if(!(/^[1-9]\\d*$/).test(jumpPageNum)){alert('跳转页面值只能填写正整数');return false;}"); builder.append("if(jumpPageNum>"+page.getTotalPage()+"){alert('跳转的页数大于总页数!');return false;}"); builder.append("var url='"+url+"?page.currentPage='+jumpPageNum;self.location.href=url }"); builder.append("function refreshPage(){self.location.href='"+url+"';}"); builder.append("</script>"); builder.append("<div class='page'><ul>"); //如果当前页面为第一页 if(currentPage==1){ if(startPage) builder.append("<li class='start_off'></li>"); if(prevPage) builder.append("<li class='first_off'></li>"); } //当前页面不是第一页 else{ if(startPage) builder.append("<li class='start' onclick='javascript:loadPage(\"1\");'></li>"); if(prevPage) builder.append("<li class='first' onclick='javascript:loadPage(\""+(page.getCurrentPage()-1)+"\");'></li>"); } //判断是否显示google风格的分页 if(forPage && totalPage>0){ builder.append("<li>"); builder.append("<div class='pagenumber'>"); builder.append("<ul>"); builder.append("<li class='fleft'></li>"); /** * 每次只取9页 */ for(long pagenum=1;pagenum<=page.getTotalPage();pagenum++){ if(page.getCurrentPage()<5 && pagenum<10){ if(pagenum==page.getCurrentPage()) builder.append("<li class='nowPage' title='第"+pagenum+"页'>"+pagenum+"</li>"); else builder.append("<li class='fcenter' title='第"+pagenum+"页'><a href='"+url+"?page.currentPage="+pagenum+"'>"+pagenum+"</a></li>"); }else{ //页面大于5以后,当前页位于中间 if(pagenum>page.getCurrentPage()-5 && pagenum<page.getCurrentPage()+5){ if(pagenum==page.getCurrentPage()) builder.append("<li class='nowPage' title='第"+pagenum+"页'>"+pagenum+"</li>"); else builder.append("<li class='fcenter' title='第"+pagenum+"页'><a href='"+url+"?page.currentPage="+pagenum+"'>"+pagenum+"</a></li>"); } } } builder.append("<li class='fright'></li>"); builder.append("</ul>"); builder.append("</div>"); builder.append("</li>"); } //如果当前页面为尾页 if(currentPage==totalPage || totalPage<=0){ if(prevPage) builder.append("<li class='next_off'></li>"); if(startPage) builder.append("<li class='end_off'></li>"); } //当前页面不是尾页 else{ if(prevPage) builder.append("<li class='next' onclick='javascript:loadPage(\""+(page.getCurrentPage()+1)+"\");'></li>"); if(startPage) builder.append("<li class='end' onclick='javascript:loadPage(\""+page.getTotalPage()+"\");'></li>"); } /* 先屏蔽 //如果启用页面显示页数选择 这里启用5 10 15 20供用户选择 if(skipCount){ builder.append("<li>"); builder.append("<select class='rounded' name='page.pageSize'"); builder.append("<option value='5'>5条/页</option>"); builder.append("<option value='10' selected='selected'>10条/页</option>"); builder.append("<option value='15'>15条/页</option>"); builder.append("<option value='20'>20条/页</option>"); builder.append("</select>"); builder.append("</li>"); }*/ //如果启用页面跳转 if(jumpText && totalPage>0){ builder.append("<li>"); builder.append("<input type='text' size='5' name='page.currentPage' id='jump_page_num' class='rounded jumpInput'>"); builder.append("</li>"); builder.append("<li class='jump' onclick='javascript:jumpPage();'></li>"); } //如启用总页数显示 if(showCurAndSum){ builder.append("<li class='pageInfo'>共<span>"+page.getTotalCount()+"</span>条/共<span>"+page.getTotalPage()+"</span>页</li>"); } if(refresh){ builder.append("<li class='refresh' title='刷新' onclick='javascript:refreshPage();'></li>"); } builder.append("</ul></div>"); super.pageContext.getOut().print(builder.toString()); } } catch (Exception e) { e.printStackTrace(); } return SKIP_BODY; } }
4.标签配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>w</short-name> <uri>http://wilr.iteye.com</uri> <display-name>分页通用标签</display-name> <tag> <name>p</name> <tag-class>wilr.utils.paging.taglib.PagingTag</tag-class> <attribute> <name>skipCount</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否显示条数选择</description> </attribute> <attribute> <name>jumpText</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否显示跳页输入</description> </attribute> <attribute> <name>prevPage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否显示上/下一页</description> </attribute> <attribute> <name>startPage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否显示首/尾页</description> </attribute> <attribute> <name>forPage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否使用循环输出页</description> </attribute> <attribute> <name>showCurAndSum</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否显示总页/总条数</description> </attribute> <attribute> <name>refresh</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>是否可以刷新</description> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>String</type> <description>请求URL</description> </attribute> <attribute> <name>page</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>分页对象</description> </attribute> </tag> </taglib>
5.分页数据持久层实例工厂
package wilr.utils.paging.factory; import wilr.utils.paging.domain.Page; /** * @project paging * @path wilr.utils.paging.factory * @desc 分页组件接口工厂 * @author Wilr * @QQ:545881075 * @time 2012-2-29 上午10:08:16 */ public interface PagingFactory { /** * @project paging * @path wilr.utils.paging.factory * @desc 查询对象条数 * @author Wilr * @QQ:545881075 * @time 2012-2-29 上午10:08:49 * @param page 分页对象 * @return */ public Integer queryObjCount(Page page); /** * @project paging * @path wilr.utils.paging.factory * @desc 查询对象 * @author Wilr * @QQ:545881075 * @time 2012-2-29 上午10:08:49 * @param page 分页对象 * @return */ public Page queryObjList(Page page); }
6.分页组件持久层实例工厂实现类(这里采用Spring注解方式,有需求的朋友可以自己修改)
package wilr.utils.paging.factory.impl; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import wilr.utils.paging.domain.Page; import wilr.utils.paging.factory.PagingFactory; @Service @Transactional public class PagingFactoryImpl implements PagingFactory { @Resource SessionFactory factory; @Transactional(propagation=Propagation.NOT_SUPPORTED) public Integer queryObjCount(Page page) { StringBuffer queryHQL=new StringBuffer("SELECT COUNT(*) FROM "+page.getObjName()); //如果查询条件不为空 if(page.getCondition()!=null && !page.getCondition().trim().equals("")) queryHQL.append(" WHERE "+page.getCondition()); //如果排序不为空 if(page.getOrderBy()!=null && !page.getOrderBy().trim().equals("")) queryHQL.append(" order by "+page.getOrderBy()); return Integer.parseInt(factory.getCurrentSession().createQuery(queryHQL.toString()).uniqueResult().toString()); } @Transactional(propagation=Propagation.NOT_SUPPORTED) public Page queryObjList(Page page) { StringBuffer queryHQL=new StringBuffer(); if(page.getQueryField()!=null && !page.getQueryField().trim().equals("")) queryHQL.append("SELECT "+page.getQueryField()+" FROM "+page.getObjName()); else queryHQL.append("FROM "+page.getObjName()); if(page.getCondition()!=null && !page.getCondition().trim().equals("")) queryHQL.append(" WHERE "+page.getCondition()); if(page.getOrderBy()!=null) queryHQL.append(" order by "+page.getOrderBy()); System.out.println(queryHQL.toString()); Query query=factory.getCurrentSession().createQuery(queryHQL.toString()); query.setFirstResult(page.getStartIndex()); query.setMaxResults(page.getPageSize()); page.setTotalCount(this.queryObjCount(page)); page.setObjList(query.list()); return page; } }
7.Service或Action使用Demo
7.1 注入分页数据持久层工厂
@Resource PagingFactory factory;
7.2 声明分页主键实体对象Page并get set
private Page page; public Page getPage() {return page;} public void setPage(Page page) {this.page = page;}
7.3 方法调用
if(page==null)page=new Page(); //对象名称 page.setObjName("Demo t"); //条件 page.setCondition("t.id>0"); //排序 page.setOrderBy("t.id desc"); //每页显示条数(默认10) page.setPageSize(15); //查询属性(为空查询所有) page.setQueryField("t.id,t.name'); //调用工厂获得数据 page=factory.queryObjList(page);
8.页面使用(css相关可参考第1条查看我的博客获得)
8.1 引入标签
<%@ taglib prefix="w" uri="http://wilr.iteye.com"%>
8.2 引入CSS
<link rel="stylesheet" type="text/css" href="${path}/paging/paging.css">
8.3 使用标签
<w:p url="${path}/test!loadDemoList.action" page="${page}"></w:p>
8.3页面调用数据
<s:if test="page.objList==null || page.objList.size==0"> 无信息! </s:if> <s:else> <s:iterator value="page.objList" id="demo"> ${demo.id}--${demo.name} </s:iterator> </s:else>
需要JSON数据可在Action中如下处理:
JSONArray.fromObject(page.getObjList());
标签全部结束,将工厂、实体、标签打包,以后就可以通用。呵呵!!!!欢迎大家交流和提出宝贵的意见!!!
附:标签参数说明:
必选参数 url:查询列表的action访问路径。 page:分页对象。从actiong中得到。 可选参数: forPage:是否显示多页风格(类似google),值:true/false 默认为:true jumpText:是否可以输入跳转页,值:true/false 默认为:true prevPage:是否显示上/下一页,值:true/false 默认为:true prevPage:是否显示上/下一页,值:true/false 默认为:true startPage:是否显示首/尾页,值:true/false 默认为:true showCurAndSum:是否显示总条数和总页数,值:true/false 默认为:true refresh:是否启用刷新,值:true/false 默认为 true
评论
10 楼
lqp2012
2012-12-21
可以发份源码学习下(805406443@qq.com),谢谢
9 楼
datouxiangzi
2012-12-12
博主求一份源码,谢谢了邮箱 datouxiangzi@163.com
8 楼
gzhgc2010
2012-11-27
,能给一份源码吗, 邮箱gzhgc2010@163.com 非常感谢!
7 楼
javaxiake
2012-11-14
请问有完整源码嘛 或者已经打包好的jar 能否发我邮箱 823871571@qq.com 学习一下 我连的oracle没事吧,对了,这个代码任何数据库都通用么?谢谢!
6 楼
zhan19861022
2012-11-13
您好,求份源码,谢谢 290581396@qq.com
5 楼
zqssei
2012-10-30
/test!loadDemoList.action
这段是什么意思?
这段是什么意思?
4 楼
wangkebin
2012-10-30
zqssei 写道
求份源码学习一下 邮箱549834027@qq.com 谢谢
已发
3 楼
wangkebin
2012-10-30
liuwenfeng554 写道
很不错 请问有完整源码嘛 或者已经打包好的jar 能否发我邮箱 277302106@qq.com 学习一下
已发
2 楼
zqssei
2012-10-29
求份源码学习一下 邮箱549834027@qq.com 谢谢
1 楼
liuwenfeng554
2012-09-02
很不错 请问有完整源码嘛 或者已经打包好的jar 能否发我邮箱 277302106@qq.com 学习一下
发表评论
-
软件设计模式
2012-08-07 23:08 759最近在微博上逃淘到一本关于设计模式的书,个人觉得是我 ... -
安装Office2010/2007出现1935错误解决办法
2012-08-02 22:01 4105安装Office出现1935问题导致无法安装 或“打开或 ... -
开发热门资料大集合
2012-07-15 00:11 981相关开发资料分享: 移动开发类:1、2012Android开 ... -
移动应用开发的7个致命错误
2012-07-14 22:36 876“幸福的家庭总是相似 ... -
浅谈Java开发规范--命名规范
2011-10-21 13:26 1873一个好的软件,不单依赖于架构及项目管理,而且与代码 ... -
Spring+Struts+ibatis下配置数据读写分离及事务(四)
2011-10-12 13:22 2141接 Spring+Struts+ibatis下配置数据读写分离 ... -
Spring+Struts+ibatis下配置数据读写分离及事务(三)
2011-10-12 13:03 2126接Spring+Struts+ibatis下配置数据读写分离及 ... -
Spring+Struts+ibatis下配置数据读写分离及事务(二)
2011-10-12 11:59 2420接Spring+Struts+ibatis下配置数据读写分离及 ... -
Spring+Struts+ibatis下配置数据读写分离及事务(一)
2011-10-12 11:53 4617最近使用ssi框架,参考了一位网友写的ssh数据读 ... -
SSI中打印SQL语句、参数及结果
2011-10-11 10:40 4065在log4j.properties中加上如下代码段,即可在控制 ... -
浅谈Spring+Struts+Ibatis项目结构下的持久层优化
2011-10-11 10:24 2820由于工作原因,这段时间需要接触Spring+Str ...
相关推荐
总结,这个"JSP通讯录/SSH/带分页/带源码/"项目展示了如何使用SSH框架开发一个具备分页功能的Web应用,实现了基础的增删改查操作。这对于学习和理解SSH框架的整合以及Java Web开发流程具有很高的参考价值。源码的...
在这个特定的上下文中,"ssh 分页组件"指的是在SSH框架中实现数据分页的功能。数据分页在大型应用中尤为重要,因为它能有效地管理大量数据,避免一次性加载过多数据导致性能下降。 分页组件通常由两部分组成:前端...
在这个场景中,"SSH分页组件"指的是在SSH框架下实现数据分页功能的组件。 分页是Web应用中常见的需求,特别是在处理大数据量时,为了提高用户体验和系统性能,需要将结果集分割成多个小部分(页)进行显示。SSH分页...
Java SSH(Struts2、Spring、Hibernate)框架是Java企业级开发中常用的一种技术栈,它结合了这三个组件的优点,提供了强大的MVC架构支持。在处理大数据量时,分页功能是必不可少的,它可以提高应用性能,提升用户...
Java 分页组件是Java开发中常见的一种工具,用于在Web应用程序中实现数据的分页显示。在大型系统中,由于数据量庞大,一次性加载所有数据不仅会影响页面加载速度,也会消耗大量的服务器资源。因此,分页技术应运而生...
SSH分页插件的核心功能是将数据库查询结果按照一定的页码和每页记录数进行切割,使得用户可以逐页浏览,提高用户体验并减轻服务器负担。这个插件通常会集成到SSH框架中,通过简单的配置和调用,就能实现复杂的数据...
综上所述,SSH分页是Java企业级开发中的一个重要技术,它涉及到了Struts的控制层、Hibernate的数据访问层和Spring的整合及服务层,是提升应用性能和用户体验的关键手段之一。通过熟练掌握SSH分页,开发者可以更高效...
总的来说,理解并掌握Struts中的分页机制对于Java Web开发者来说至关重要,这不仅可以提升应用的用户体验,还能有效提高服务器的运行效率。通过阅读`javaweb分页.txt`文件,您可以更深入地学习和理解这个主题。
在实际开发中,我们还可以考虑使用一些现成的分页组件,如MyBatis的PageHelper插件,它可以简化分页的实现,减少代码量,同时提供了一些额外的优化功能。 综上所述,SSH框架下的分页实现涉及到多个层次的协同工作,...
SSH(Struts、Spring、Hibernate)是Java Web...理解这些组件的协同工作原理,对于开发高效且易于维护的Java Web应用至关重要。在实践中,开发者需要根据具体需求灵活运用这些技术,实现高效、稳定和易用的分页功能。
总的来说,SSH分页是一个涉及前端交互、后端处理和数据库查询的完整过程,需要协调多个组件协同工作。这个例子是一个很好的学习资源,可以帮助开发者掌握在Java Web应用中实现高效分页的关键技术。
在IT行业中,SSH和MySQL是两个非常重要的技术组件。SSH(Spring、Struts、Hibernate)是一种常见的Java web开发框架,而MySQL则是一款广泛使用的开源关系型数据库管理系统。在这个"SSH+Mysql无刷新分页实例"中,我们...
总结起来,这个压缩包提供的SSH分页实例数据库MySQL连接,旨在帮助初学者掌握SSH框架在实际项目中的应用,尤其是如何利用SSH实现数据的CRUD操作和分页功能,对于提升Java Web开发技能具有很大价值。通过实践这个实例...
在这个"SSH分页源代码"中,我们可以深入理解如何在Java Web应用中实现数据的分页显示。 Spring框架作为整个应用的基石,提供了一个统一的入口点,管理了其他组件的生命周期和依赖关系。在分页场景中,Spring可以...
在Java Web开发中,SSH(Struts2、Hibernate、Spring)框架是一个常见的组合,用于构建高效、可维护的Web应用程序。SSH框架集成了MVC设计模式、对象关系映射(ORM)以及依赖注入(DI)和面向切面编程(AOP)。在本...
**SSH分页实例** 在实际项目中,当数据量较大时,通常需要实现分页展示,以提高用户体验。在SSH框架下,可以利用Struts2的拦截器或者Action方法来实现分页参数的传递,如当前页数和每页记录数。然后在Spring管理的...
在这个名为"ssh.zip_SSH 数据分页_ssh分页实现"的压缩包中,我们可以看到一个关键的实践案例——如何在SSH框架下实现数据分页功能。数据分页在Web应用中极为重要,因为它能够帮助用户更有效地浏览大量信息,提高用户...
SSH,全称是Struts、Hibernate和Spring,是中国乃至全球许多Java Web开发中的经典技术栈。这三种技术分别负责Web层、持久层和应用层的管理,构建出强大的企业级应用解决方案。 Struts是Apache软件基金会的一个开源...
在这个"ssh分页源码"项目中,开发者已经实现了一套基于这三个框架的分页功能。分页是Web应用中常见的需求,它允许用户浏览大量数据时,一次只显示一部分,提高用户体验并减轻服务器负载。 Struts2在分页中主要负责...
本资源"java中SSH整合最全版本"显然包含了这些框架的整合教程或实例,特别提到了"加分页"功能,意味着它可能包含如何在SSH应用中实现分页查询的示例。 Struts2是Apache基金会的一个项目,它提供了强大的Action和...