- 浏览: 52505 次
- 性别:
- 来自: 西安
最近访客 更多访客>>
最新评论
-
gundumw100:
如何反过来旋转?比如按一下顺时针旋转,在按一下逆时针旋转。
android视图360度旋转效果 -
xuehaipeng:
龙哥IT 写道这个案例可不可以分页啊?这个例子只是支持Scro ...
scrollView中实现listView的解决方法 -
龙哥IT:
动态加载分页
scrollView中实现listView的解决方法 -
龙哥IT:
这个案例可不可以分页啊?
scrollView中实现listView的解决方法 -
xwq18:
谢谢了,很好很强大
java时间差
my-tag.tld
PageBean.java
PageHandler.java
PageTag.java 这里构造的链接是静态化链接,按自己的需求而定
在action中做如下定义:
jsp页面:
css设置:
最后在业务逻辑层:
<?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>mytag</short-name> <uri>/mytag</uri> <!-- 继承struts2标签ComponentTagSupport --> <tag> <name>page</name> <tag-class>com.itmg.tools.mytags.PageTag</tag-class> <attribute> <name>action</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>index</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>maxIndex</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>size</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>groupSize</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>styleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>theme</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
PageBean.java
package com.itmg.tools.page; /** * 分页信息的数据模型 *@author Jason */ public class PageBean implements java.io.Serializable{ private static final long serialVersionUID = 1L; private int offset;//偏离量 private int length; private int begin; private int end; private int total; private int curPage; private int totalPage; private int startPage; private int endPage; private int gotoPage;//要到哪一页去 public PageBean() { } public int getStartPage() { return startPage; } public void setStartPage(int startPage) { this.startPage = startPage; } public int getEndPage() { return endPage; } public void setEndPage(int endPage) { this.endPage = endPage; } public int getOffset() { return offset; } public void setOffset(int offset) { this.offset = offset; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getBegin() { return begin; } public void setBegin(int begin) { this.begin = begin; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public int getCurPage() { return curPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getGotoPage() { return gotoPage; } public void setGotoPage(int gotoPage) { this.gotoPage = gotoPage; } }
PageHandler.java
package com.itmg.tools.page; import javax.servlet.http.HttpServletRequest; import com.itmg.util.Constants; /** * 分页处理类,处理分页的逻辑 * * @author Jason */ public class PageHandler { /** * 得到初始化的分页信息 * * @param request * @return */ public static PageBean initPage(HttpServletRequest request) { int length = Constants.PART_PAGE_PER_COUNT; int offset = 0; int gotoPageIndex = 1; int total = 0; PageBean page = new PageBean(); page.setOffset(offset); page.setLength(length); page.setGotoPage(gotoPageIndex); page.setTotal(total); return page; } /** * 得到初始化的分页信息 * * @return */ public static PageBean initPage() { int length = Constants.PART_PAGE_PER_COUNT; int offset = 0; int gotoPageIndex = 1; int total = 0; PageBean page = new PageBean(); page.setOffset(offset); page.setLength(length); page.setGotoPage(gotoPageIndex); page.setTotal(total); return page; } /** * 根据传入的PageBean的total,offset,已经请求的动作,等信息 处理出完成此请求动作,正确的分页信息 请求的动作包括 * * 上一页,下一页,具体某页等 * * * 分页信息包括 数据总数,从那条数据开始取数,取多少条等 * * * @param page * @throws Exception */ public static PageBean handle(PageBean page) throws Exception { int offset, curPage, begin, end, total, totalPage, gotoPage, length, startPage, endPage; offset = page.getOffset(); curPage = page.getCurPage(); begin = page.getBegin(); end = page.getEnd(); total = page.getTotal(); totalPage = page.getTotalPage(); gotoPage = page.getGotoPage(); length = page.getLength(); startPage = page.getStartPage(); endPage = page.getEnd(); if (gotoPage != 1) { offset = length * (gotoPage - 1); } begin = offset + 1; if (offset + length > total) end = total; else end = offset + length; curPage = offset / length + 1; if (total % length == 0) { totalPage = total / length; } else { totalPage = total / length + 1; } startPage = curPage - 5; if (startPage < 1) startPage = 1; endPage = startPage + 9; if (endPage > totalPage) endPage = totalPage; if (end == 0) begin = 0; page.setOffset(offset); page.setLength(length); page.setBegin(begin); page.setEnd(end); page.setCurPage(curPage); page.setEndPage(endPage); page.setGotoPage(gotoPage); page.setLength(length); page.setStartPage(startPage); page.setTotalPage(totalPage); page.setTotal(total); return page; } /** * 从HttpServletRequest 参数中 得到分页请求的值,设置在PageSelect中 * * * @param request * @return */ public static PageBean getPageRequest(HttpServletRequest request) { int length = Constants.PART_PAGE_PER_COUNT; PageBean page = (PageBean) request.getAttribute(Constants.PART_PAGE_KEY); if (page == null) { page = new PageBean(); page.setOffset(0); page.setLength(length); page.setGotoPage(1); } return page; } /** * 把分页信息 设置在 request 的Attribute中 * * @param request * @param page * 分页信息 * @throws Exception */ public static void putPage(HttpServletRequest request, PageBean page) throws Exception { try { request.setAttribute(Constants.PART_PAGE_KEY, page); } catch (Exception e) { return; } } }
PageTag.java 这里构造的链接是静态化链接,按自己的需求而定
package com.itmg.tools.mytags; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts2.ServletActionContext; public class PageTag extends TagSupport { private static final long serialVersionUID = -1122449622265941160L; // action url private String action; // 当前页码 private Integer index; // 最大页码数 private Integer maxIndex; // 每页最多显示个数 private Integer size; // 每组显示页码个数 private Integer groupSize; // css private String styleClass; // 模板 private String theme; @Override public int doStartTag() throws JspException { HttpServletRequest request = ServletActionContext.getRequest(); JspWriter out = pageContext.getOut(); String keywords = request.getParameter("keywords"); String category = request.getParameter("category"); String minPrice = request.getParameter("minPrice"); String maxPrice = request.getParameter("maxPrice"); String sort = request.getParameter("sort"); String isAuction = request.getParameter("isAuction"); if(isAuction == null) isAuction = "0"; try { if(category != null && !"".equals(category)){ if(minPrice != null || maxPrice != null) action += keywords+"/category/"+category+"/price/"+minPrice+"-"+maxPrice+"/"; else action += keywords+"/category/"+category+"/"; }else{ if(minPrice != null || maxPrice != null) action += keywords+"/price/"+minPrice+"-"+maxPrice+"/"; else action += keywords+"/"; } StringBuffer html = new StringBuffer(); String url = null; // 如果只有一页,则无需分页 if (maxIndex > 1) { // 数字样式 << prev 1 2 3 4 5 6 7 8 9 10 next >> html.append("<div "); if (styleClass != null) { html.append("class='" + styleClass + "'>"); } else { html.append(">"); } if (index > 1) { // 当前不是第一组,要显示"<< Prev" // << Prev返回前一页 if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort))) url = action + "/"+sort+"/"+isAuction; else url = action; // html.append("<a href='" + url + "'>先頭ページへ</a> "); if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort))) url = action + (index - 1) +"/"+sort+"/"+isAuction; else if(index>2) url = action + (index - 1); else url = action; html.append("<a rel=\"nofollow\" href='" + url + "'>前ページへ</a> "); } // 从第begin页开始显示到end页,每组有groupSize个页数 int begin, end; // groupSize不为空,分组显示,否则全部显示 if (groupSize != null && groupSize < maxIndex) { // 每组显示页码个数的一半 int halfGroupSize = (groupSize - 1) / 2; begin = (index - (halfGroupSize + 1)) > 0 ? (index - (halfGroupSize + 1)) : 1; end = (index + halfGroupSize) < maxIndex ? (index + halfGroupSize) : maxIndex; if (end == maxIndex) { if (maxIndex - groupSize < 1) { begin = maxIndex; } begin = maxIndex - groupSize; } else if (begin == 1 && end < maxIndex) { end = maxIndex > groupSize ? groupSize : maxIndex; } } else { begin = 1; end = maxIndex; } // groupSize个为一组显示 for (int i = begin; i <= end; i++) { if (index == i) { // 当前页要加粗显示 html.append("<span class=\"current\">" + i + "</span> "); } else { if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort))) url = action + i + "/"+sort+"/"+isAuction; else if(i==1) url = action; else url = action + i; html.append("<a rel=\"nofollow\" href='" + url + "'>" + i + "</a> "); } } if (index < maxIndex) { // >>:返回下一组最后一页 // >:返回下一页 if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort))) url = action + (index + 1) + "/"+sort+"/"+isAuction; else url = action + (index + 1); html.append("<a rel=\"nofollow\" href='" + url + "'>次ページへ</a> "); if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort))) url = action + maxIndex + "/"+sort+"/"+isAuction; else url = action + maxIndex; // html.append("<a href='" + url + "'>最終ページへ</a>"); } html.append("</div>"); } out.write(html.toString()); } catch (IOException e) { e.printStackTrace(); } return (SKIP_BODY); } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public Integer getIndex() { return index; } public void setIndex(Integer index) { this.index = index; } public Integer getMaxIndex() { return maxIndex; } public void setMaxIndex(Integer maxIndex) { this.maxIndex = maxIndex; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } public Integer getGroupSize() { return groupSize; } public void setGroupSize(Integer groupSize) { this.groupSize = groupSize; } public String getStyleClass() { return styleClass; } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public String getTheme() { return theme; } public void setTheme(String theme) { this.theme = theme; } }
在action中做如下定义:
//分页信息 PageBean page = new PageBean(); if (request.getParameter(Constants.PART_PAGE_PAGESEARCH) != null && request.getParameter(Constants.PART_PAGE_PAGESEARCH).equals("true")) { page = PageHandler.initPage(request); } page.setLength(Constants.PART_PAGE_PER_COUNT_10); if (index != null) { page.setGotoPage(index); } else { page.setGotoPage(1); }
jsp页面:
<div id="page"> <div class="page_styl"> <mytag:page index="${resultView.page.curPage}" maxIndex="${resultView.page.totalPage}" action="${pageContext.request.contextPath}/word/" size="${resultView.page.length}" styleClass="page_styl" groupSize="12"></mytag:page> </div> </div>
css设置:
#page { margin: 40px auto; margin-bottom: 25px; text-align: center; } div .page_styl { text-align: center; padding-right: 1px; padding-left: 1px; padding-bottom: 3px; margin: 3px; padding-top: 3px; text-align: center; font-size: 14px; } div .page_styl a { border-right: #fff 1px solid; padding-right: 1px; border-top: #fff 1px solid; padding-left: 1px; padding-bottom: 1px; margin: 2px; border-left: #fff 1px solid; color: #0032ab; padding-top: 1px; border-bottom: #fff 1px solid; text-decoration: underline } div .page_styl span.current { border-right: #fff 1px solid; padding-right: 1px; border-top: #fff 1px solid; padding-left: 1px; font-weight: bold; padding-bottom: 1px; margin: 2px; border-left: #fff 1px solid; color: #000; padding-top: 1px; border-bottom: #fff 1px solid; /* background-color: #d5d5d5;*/ } div .page_styl span.disabled { border-right: #eee 1px solid; padding-right: 5px; border-top: #eee 1px solid; padding-left: 5px; padding-bottom: 2px; margin: 2px; border-left: #eee 1px solid; color: #ddd; padding-top: 2px; border-bottom: #eee 1px solid }
最后在业务逻辑层:
page.setTotal(searchResult_temp.size()); page = PageHandler.handle(page);
发表评论
-
Java 理论与实践: 线程池与工作队列
2010-08-27 09:35 845转:http://www.ibm.com/developerw ... -
线程Stack用法
2010-07-20 15:05 971private int getThreadCount(){ ... -
Sax解析结合Xpath的用法
2010-05-26 14:23 2612package sax; import java.i ... -
日期的一些常用命令
2010-05-24 09:38 746package com.john.j2se.date; ... -
通过uuid获得不同的字符串
2010-05-19 13:42 940public static String recognis ... -
常用正则表达式
2010-04-01 18:14 656"^\d+$" //非负 ... -
数据库连接池用法
2010-03-31 15:15 960连接池管理器: package com.itmg.dao. ... -
properties文件的使用
2010-03-31 15:04 789首先有个名字是TransServer.properties的文 ... -
字符集过滤
2010-03-26 10:52 997web.xml中的配置 <!-- 字符集过滤器 -- ... -
spring简单的搭建
2010-03-26 10:49 765类中要调用beanID的方式: package com.i ... -
java实现英文字母统计
2010-03-18 15:43 1543import java.util.ArrayList; ... -
java时间差
2010-03-18 14:11 3516转载:http://baile8410.iteye.com/b ... -
java日期工具类
2010-03-15 16:52 974//取一天中的hour值 public static ... -
自动获取文件路径
2010-03-15 14:19 1047private static String getReal ... -
MD5加密和Base64加密解密算法
2010-03-13 10:08 2355package com.john.j2se.util; ... -
全角和半角直接的转换
2010-03-13 10:05 927package com.john.j2se.util; ...
相关推荐
本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...
在这个“java自定义标签分页”主题中,我们将深入探讨如何利用自定义标签来实现高效且易于维护的分页功能。 首先,自定义标签的定义通常涉及以下组件: 1. TLD(Tag Library Descriptor)文件:这是定义自定义标签...
在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 Struts 1.3 框架包的情况下,我们可以自己编写相关的组件来达到相同的效果。 ...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...
"强大的自定义标签分页"是指通过自定义JSP标签来实现灵活、高效的分页功能。这种方式可以提供更高的定制性,使得开发者可以根据项目需求进行个性化的设计和调整。 首先,我们来了解自定义标签。在Java Web开发中,...
1. **标签库描述符(TLD)**:在TLD文件中,开发者会声明这个分页标签,包括标签的名字、属性(如当前页数、总页数等)、以及指向标签处理类的引用。 ```xml <name>paging <tag-class>...
在处理大量数据时,分页技术是必不可少的,它可以帮助用户更有效地浏览和管理信息。本主题将深入探讨如何使用JSP自定义标签来实现分页功能,这将使代码更加整洁,提高可维护性,并为用户提供更好的用户体验。 首先...
在本案例中,分页处理程序作为一个自定义标签,可以方便地嵌入到JSP页面中,以处理分页显示数据的需求。 分页通常涉及到以下几个关键部分: 1. **页面链接生成**:根据当前页码和总页数,生成可供用户点击的页面...
例如,你可以创建一个名为`fenyeTag.tld`的文件,其中包含分页标签的相关信息,如标签名称、描述、属性等。 2. **编写Java类**:创建处理标签逻辑的Java类,该类通常需要继承`javax.servlet.jsp.tagext.TagSupport`...
Java自定义标签的实现通常涉及两个主要部分:标签处理类(Tag Handler)和标签库描述文件(TLD,Tag Library Descriptor)。 在本例中,我们继承了`javax.servlet.jsp.tagext.TagSupport`类来创建自定义标签处理类...
自定义标签由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD, Tag Library Descriptor)。 二、创建自定义分页标签 1. **编写Tag Handler类** 分页标签的处理类通常需要实现`javax.servlet.jsp....
本项目“Taglib自定义标签分页”提供了一个完整的解决方案,它实现了在网页上进行分页显示的功能,无需在每个JSP页面中重复编写分页代码,极大地提高了开发效率和代码复用性。 首先,我们需要了解自定义标签的基本...
分页标签组件的工作原理是通过自定义TLD(Tag Library Descriptor)文件,定义标签行为,并在JSP页面中使用这些标签来实现分页功能。`papertag.tld`文件就是这个组件的配置文件,它定义了标签的属性、方法和作用域等...
`pagesetDemo`这个示例项目可能会包含一个JSP页面,展示了如何在页面中使用这个分页标签,以及一个对应的Java类来处理分页逻辑。通过查看这个项目,开发者可以了解自定义标签的实际应用,以及如何将它们整合到自己的...
总结起来,`分页工具条自定义标签`是一个通过自定义JSP标签实现的分页功能,它的核心在于`page.tld`配置文件和对应的标签处理类。通过这种方式,开发者可以方便地自定义分页样式和逻辑,提升项目的可维护性和可扩展...
总结,Struts标签分页是一种高效且灵活的方式,它将分页逻辑封装在自定义标签中,使得JSP页面更简洁,同时降低了视图与业务逻辑的耦合度。通过学习和实践,你可以更好地掌握这一实用技巧,并将其应用于各种Java Web...
Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。这个技术可以让用户更方便地浏览和导航大量的信息,而不会一次性加载所有数据...
总结来说,自定义分页标签Java涉及到的知识点包括JSP标签库的创建、Java标签处理类的编写、数据库交互与SQL操作、请求参数处理、数据模型的设计以及优化策略。通过熟练掌握这些知识点,开发者可以构建出高效、灵活的...