1. //1. 导入pager-taglib.jar包;
2. //2.引入pager-taglib标签:<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation /pager" %>
3. //3.建立PagerModel类:
4. public class PagerModel {
5. /**
6. * 总记录数
7. */
8. private int total;
9. /**
10. * 当前页结果集
11. */
12. private List datas;
13. public List getDatas() {
14. return datas;
15. }
16. public void setDatas(List datas) {
17. this.datas = datas;
18. }
19. public int getTotal() {
20. return total;
21. }
22. public void setTotal(int total) {
23. this.total = total;
24. }
25. }
26. //4.pager业务逻辑部分:
27. public class AbstractManager extends HibernateDaoSupport {
28. public PagerModel searchHql(String hql){
29. return searchHql(hql,null,SystemContext.getOffset(),SystemContext.getPageSize());
30. }
31. public PagerModel searchHql(String hql,Object datas){
32. return searchHql(hql,new Object[]{datas},SystemContext.getOffset(),SystemContext.getPageSize());
33. }
34. public PagerModel searchHql(String hql,Object[] datas){
35. return searchHql(hql,datas,SystemContext.getOffset(),SystemContext.getPageSize());
36. }
37. public PagerModel searchHql(String hql,int offset,int pageSize){
38. return searchHql(hql,null,offset,pageSize);
39. }
40. public PagerModel searchHql(String hql,Object datas,int offset,int pageSize){
41. return searchHql(hql,new Object[]{datas},offset,pageSize);
42. }
43. public PagerModel searchHql(String hql,Object[] datas,int offset,int pageSize){
44. String countHql = getQuery(hql);
45. Query query = getSession().createQuery(countHql);
46. if(datas !=null && datas.length > 0){
47. for(int i = 0 ; i<datas.length;i++)
48. query.setParameter(i, datas[i]);
49. }
50. int total = ((Long)query.uniqueResult()).intValue();
51. Query query1=getSession().createQuery(hql);
52. if(datas !=null && datas.length > 0){
53. for(int i = 0 ; i<datas.length;i++)
54. query1.setParameter(i, datas[i]);
55. }
56. List list =query1.setFirstResult(offset) .setMaxResults(pageSize).list();
57. PagerModel pm = new PagerModel();
58. pm.setDatas(list);
59. pm.setTotal(total);
60. return pm;
61. }
62. public String getQuery(String hql){
63. int index =hql.indexOf("from");
64. if(index != -1){
65. return "select count(*)"+hql.substring(index);
66. }
67. throw new SystemException("查询语句出错!");
68. }
69. }
70.
71. //5.定义offset、pagesize类:
72. public class SystemContext {
73. private static ThreadLocal offset = new ThreadLocal();
74. private static ThreadLocal pageSize = new ThreadLocal();
75. public static int getOffset(){
76. Integer os = (Integer)offset.get();
77. if(os == null){
78. return 0;
79. }
80. return os;
81. }
82. public static void setOffset(int offsetvalue){
83. offset.set(offsetvalue);
84. }
85. public static void removeOffset(){
86. offset.remove();
87. }
88. public static int getPageSize(){
89. Integer ps = (Integer)pageSize.get();
90. if(ps == null){
91. return Integer.MAX_VALUE;
92. }
93. return ps;
94. }
95. public static void setPageSize(int pageSizevalue){
96. pageSize.set(pageSizevalue);
97. }
98. public static void removePageSize(){
99. pageSize.remove();
100. }
101. }
102. //6.过滤器中初始化pagesize、offset:
103. public class PagerFilter implements Filter {
104. public void destroy() {
105. }
106. public void doFilter(ServletRequest request, ServletResponse response,
107. FilterChain chain) throws IOException, ServletException {
108. HttpServletRequest httpRequest =(HttpServletRequest)request;
109. SystemContext.setOffset(getOffset(httpRequest));
110. SystemContext.setPageSize(getPageSize(httpRequest));
111. try{
112. chain.doFilter(request, response);
113. }finally{
114. //清空ThreadLocal中的值
115. SystemContext.removeOffset();
116. SystemContext.removePageSize();
117. }
118. }
119. public void init(FilterConfig arg0) throws ServletException {
120. }
121. public int getOffset(HttpServletRequest request){
122. int offset = 0;
123. try {
124. offset = Integer.parseInt(request.getParameter("pager.offset"));
125. } catch (NumberFormatException ignore) {
126. }
127. return offset;
128. }
129. //设置每页显示多少条记录
130. public int getPageSize(HttpServletRequest request){
131. return 3;
132. }
133. }
134. //7.配置过滤器web.xml中:
135. <filter>
136. <filter-name>pager-taglib</filter-name>
137. <filter-class>com.oa.util.filter.PagerFilter</filter-class>
138. </filter>
139.
140. <filter-mapping>
141. <filter-name>pager-taglib</filter-name>
142. <url-pattern>/*</url-pattern>
143. </filter-mapping>
144. //8.显示效果:
145. <pg:pager url="org.do" items="${pm.total }" export="currentPageNumber=pageNumber">
146. <pg:param name="parentId"/>
147. <pg:first>
148. <a href="${pageUrl}" mce_href="${pageUrl}">首页</a>
149. </pg:first>
150. <pg:prev>
151. <a href="${pageUrl }" mce_href="${pageUrl }">前页</a>
152. </pg:prev>
153. <pg:pages>
154. <c:choose>
155. <c:when test="${currentPageNumber eq pageNumber }">
156. <font color="red">${pageNumber }</font>
157. </c:when>
158. <c:otherwise>
159. <a href="${pageUrl }" mce_href="${pageUrl }">${pageNumber }</a>
160. </c:otherwise>
161. </c:choose>
162. </pg:pages>
163. <pg:next>
164. <a href="${pageUrl }" mce_href="${pageUrl }">后页</a>
165. </pg:next>
166. <pg:last>
167. <a href="${pageUrl }" mce_href="${pageUrl }">尾页</a>
168. </pg:last>
169. </pg:pager>
分享到:
相关推荐
"强大的自定义标签分页"是指通过自定义JSP标签来实现灵活、高效的分页功能。这种方式可以提供更高的定制性,使得开发者可以根据项目需求进行个性化的设计和调整。 首先,我们来了解自定义标签。在Java Web开发中,...
在这个“java自定义标签分页”主题中,我们将深入探讨如何利用自定义标签来实现高效且易于维护的分页功能。 首先,自定义标签的定义通常涉及以下组件: 1. TLD(Tag Library Descriptor)文件:这是定义自定义标签...
本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...
在这个"Spring-Hibernate的通过标签分页源码"中,我们可以深入理解如何在前端和后端实现基于Display Tag的分页功能。 Display Tag是一个开源的JSP标签库,它提供了很多用于表格展示和分页的功能,极大地简化了Web...
JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...
本项目“Taglib自定义标签分页”提供了一个完整的解决方案,它实现了在网页上进行分页显示的功能,无需在每个JSP页面中重复编写分页代码,极大地提高了开发效率和代码复用性。 首先,我们需要了解自定义标签的基本...
在这个“Struts2 完美实现 标签分页”的项目中,我们主要关注如何在Struts2框架下实现高效的分页功能,并利用自定义标签来提供友好的用户界面。 分页是Web应用中常见的需求,它有助于提高用户体验,特别是当处理...
在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 Struts 1.3 框架包的情况下,我们可以自己编写相关的组件来达到相同的效果。 ...
标题"自定义标签分页非常简单"意味着我们将探讨如何通过自定义标签来实现一个简洁且易于使用的分页功能。 自定义标签在JSP 2.0及以上版本中引入,它基于JSP Tag Library(JSTL)规范。自定义标签不是HTML标签,而是...
总结,Struts标签分页是一种高效且灵活的方式,它将分页逻辑封装在自定义标签中,使得JSP页面更简洁,同时降低了视图与业务逻辑的耦合度。通过学习和实践,你可以更好地掌握这一实用技巧,并将其应用于各种Java Web...
本文档“Asp长文章含html标签分页”似乎提供了一个解决方案,针对处理HTML标签以及非文字字符(如` `)在分页过程中可能引发的问题进行修正。 首先,我们要理解在ASP中实现文章分页的基本步骤: 1. **数据...
在IT行业中,标签分页是一种常见的用户界面设计模式,它被广泛应用于网页和应用程序中,以帮助用户更有效地浏览和管理大量的数据或内容。在这个场景中,提到的"我的标签分页 类是GOOGLE的"可能指的是一个开发者参照...
在Android开发中,ActivityGroup和GridView是两种常用的组件,它们可以协同工作来实现标签分页的效果,这是一种常见的用户界面设计模式,通常用于展示多个类似内容的页面,让用户通过标签进行切换浏览。本篇将深入...
标题和描述中提到的"邮箱(hibernate+Servlet+自定义标签,内带hibernate配置,自定义标签分页)"是一个基于Java技术栈的Web应用项目,它利用Hibernate作为持久层框架,Servlet作为控制层,以及自定义标签来实现前端展示...
实现C标签分页的具体步骤可能包括以下几点: 1. 在JSP页面中,使用C标签的`forEach`循环遍历服务层返回的分页数据,并展示每个卡片的信息。 2. 使用C标签的条件判断语句,如`<c:if>`和`<c:choose>`,来处理页码导航...
总结一下,实现Struts 2 自定义标签分页需要对Struts 2框架有深入理解,包括标签库的创建、Java类的编写、JSP页面的布局以及Action的交互。通过这种方式,我们可以创建出符合项目需求的、灵活可扩展的分页解决方案,...
总的来说,SSH框架整合通用模板提供了一个成熟的开发环境,通过自定义标签分页、通用DAO和服务,使得开发人员可以快速构建应用,同时降低了维护成本。对于初学者或熟悉SSH的开发者来说,这是一个很好的学习和实践的...
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...
在这个特定的项目中,"spring+hibernate+c标签分页+mysql"组合,意味着开发者利用Spring作为整体架构,通过Hibernate进行数据持久化,同时使用了JSP中的C标签(JSTL Core Library)来实现前端页面的分页功能,并将...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...