package com.org.utils.taglib; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class PageTag extends SimpleTagSupport { // 提交URL的一个约定的格式: pageSerlvet?pageIndex={0} private static final String TEG = "{0}"; private String parms; // 当前页数 private int pageIndex; // 一页显示的数量 private int pageSize; // 记录总条数 private int recordCount; // 提交的URL private String submitUrl; // 定义总共的页数 private int pageCount; //每页显示的实际数量 private int pageRealSize; public int getPageRealSize() { return pageRealSize; } public void setPageRealSize(int pageRealSize) { this.pageRealSize = pageRealSize; } /** * Pre前一页 * Next下一页 * «向←左left * »向→右right * */ public void doTag() throws JspException, IOException { StringBuilder pageWrapStr = new StringBuilder(); StringBuffer pageNumberStr = new StringBuffer(); if(parms==null || parms.isEmpty() || parms.trim().length()==0){ }else{ submitUrl+="&"+this.getParms(); } // 先判断记录总条数 if (recordCount > 0) { // 计算出总共的页数 pageCount = (recordCount % pageSize == 0) ? (recordCount / pageSize) : (recordCount / pageSize) + 1; // 判断总页数与当前页数的关系 pageIndex = (pageIndex >= pageCount) ? pageCount : pageIndex; //计算该页实际显示记录数 if(pageIndex<pageCount){ pageRealSize=pageSize; }else{ pageRealSize=recordCount-pageSize*(pageIndex-1); } pageWrapStr.append(" <div class='page-number-strip' style='height:62px;'> ");//page-number-strip // 确定上一页与下页是否加链接 String tempUrl1 = submitUrl.replace(TEG, String.valueOf(1)); pageNumberStr.append("<ul class='pagination'>");//添加boostrap分页样式 pageNumberStr.append("<li><a href='" + tempUrl1 + "'>«</a> </li>"); if (pageIndex == 1) { // 当前页数为第一页时 pageNumberStr.append("<li><span>Pre</span> </li>"); // 头 // 中间 calculatePage(pageNumberStr); // 尾 if (pageCount == 1) { pageNumberStr.append("<li><span>Next</span> </li>"); } else { String tempUrl = submitUrl.replace(TEG,String.valueOf(pageIndex + 1)); pageNumberStr.append("<li><a href='" + tempUrl + "'>Next</a> </li>"); } } else if (pageIndex == pageCount) { // 当前页数为最后一页时 String tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex - 1)); pageNumberStr.append("<li><a href='" + tempUrl + "'>Pre</a> </li>"); // 中间 calculatePage(pageNumberStr); // 最后一页 pageNumberStr.append("<li><span>Next</span>"); } else { // 当前页数为中间时 String tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex - 1)); pageNumberStr.append("<li><a href='" + tempUrl + "'>Pre</a> </li>"); // 中间 calculatePage(pageNumberStr); // 尾 tempUrl = submitUrl.replace(TEG, String.valueOf(pageIndex + 1)); pageNumberStr.append("<li><a href='" + tempUrl + "'>Next</a> </li>"); } String tempUrl2 = submitUrl.replace(TEG, String.valueOf(pageCount)); pageNumberStr.append("<li><a href='" + tempUrl2 + "'>»</a> </li>"); pageNumberStr.append("<li> 跳到<input type='text' id='page_number_id' size='1' value='"+pageIndex+"' sytle='margin-top:5px;'/>页 </li>"); pageNumberStr.append("<li><a>" + pageRealSize + "/" + recordCount + "items of p" + pageCount + " </a></li>"); pageNumberStr.append("<li><input type='button' value='确定' class='btn-page-confirm' style='color:#fff' onclick='doJumpPage();'/></li>"); pageNumberStr.append("</ul>"); // 加上跳转信息\显示信息 pageWrapStr.append(pageNumberStr.toString()); pageWrapStr.append(" </div> "); // 第二行拼接分页提示信息/ 计算出显录的开始记录条数与结束的记录条数 int startNum = (pageIndex - 1) * pageSize + 1; int endNum = (pageIndex == pageCount) ? recordCount : pageIndex * pageSize; // 最后拼接JavaScript代码 pageWrapStr.append("<script type=\"text/javascript\">"); pageWrapStr.append("var doJumpPage = function(){"); pageWrapStr.append("var pageCount = " + pageCount + ";"); pageWrapStr.append("var url = '" + submitUrl + "';"); pageWrapStr.append("var regu='^[0-9]+$'; var re=new RegExp(regu);"); pageWrapStr.append("var num = document.getElementById('page_number_id').value;"); pageWrapStr.append("if(num.search(re)==-1){alert('请输入整数!'); return false}"); pageWrapStr.append("if (isNaN(num) || num < 1 || num > pageCount){alert('请输入1-"+ pageCount + "范围内的页码!');return false;}"); pageWrapStr.append("var tempUrl = url.replace('" + TEG + "', num);"); pageWrapStr.append("window.location.href = tempUrl;"); pageWrapStr.append("}</script>"); //num != Integer.parseInt(num) || } // 如果记录条数小于等于0,直接输出 else { pageWrapStr.append("<table align='center' style='font-size:14px;'><tr><td>"); pageWrapStr.append("总共<span style='color:red;'>0</span>条记录,当前显示0-0条记录。"); pageWrapStr.append("</td></tr></table>"); } // 输出 this.getJspContext().getOut().println(pageWrapStr.toString()); } /** * 计算中间部分 [1]...[2][3]...[100] * * @param buder */ private void calculatePage(StringBuffer buder) { // 总页数小于等于10 if (pageCount <= 10) { for (int i = 1; i <= pageCount; i++) { // 判断哪一个是当前页 if (i == pageIndex) { buder.append("<li><span style='color:red;' >" + i + "</span> </li>"); } else { String tempUrl = submitUrl.replace(TEG, String.valueOf(i)); buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>"); } } } else { // 三种情况: 靠近第一页\靠近最后一页\中间 if (pageIndex <= 8) { // 靠近第一页 for (int i = 1; i < 10; i++) { // 判断哪一个是当前页 if (i == pageIndex) { buder.append("<li><span style='color:red;' >" + i + "</span> </li>"); } else { String tempUrl = submitUrl.replace(TEG, String.valueOf(i)); buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>"); } } // 后面部分加上更多 String tempUrl = submitUrl.replace(TEG, String.valueOf(pageCount)); buder.append("<li><a href='javascript:void(0);'>...</a></li>").append("<li><a href='" + tempUrl + "'>" + pageCount + "</a> </li>"); } else if (pageIndex > pageCount - 8) { // 靠近最后一页 // 前面部分加上更多[1]... String tempUrl = submitUrl.replace(TEG, String.valueOf(1)); buder.append("<li><a href='" + tempUrl + "'>1</a> </li>").append("<li><a href='javascript:void(0);'>...</a></li>"); for (int i = pageCount - 8; i <= pageCount; i++) { if (i == pageIndex) { buder.append("<li><span style='color:red;' >" + i + "</span> </li>"); } else { tempUrl = submitUrl.replace(TEG, String.valueOf(i)); buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>"); } } } else { // 中间 // 前面部分加上更多[1]... String tempUrl = submitUrl.replace(TEG, String.valueOf(1)); buder.append("<li><a href='" + tempUrl + "'>1</a> </li>").append("<li><a href='javascript:void(0);'>...</a></li>"); for (int i = pageIndex - 4; i <= pageIndex + 4; i++) { if (i == pageIndex) { buder.append("<li><span style='color:red;' >" + i + "</span> </li>"); } else { tempUrl = submitUrl.replace(TEG, String.valueOf(i)); buder.append("<li><a href='" + tempUrl + "'>" + i + "</a> </li>"); } } // 后面部分加上更多 tempUrl = submitUrl.replace(TEG, String.valueOf(pageCount)); buder.append("<li><a href='javascript:void(0);'>...</a></li>").append("<li><a href='" + tempUrl + "'>" + pageCount + "</a></li>"); } } } /** setter and getter method */ public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = (pageIndex < 1) ? 1 : pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getRecordCount() { return recordCount; } public void setRecordCount(int recordCount) { this.recordCount = recordCount; } public String getSubmitUrl() { return submitUrl; } public void setSubmitUrl(String submitUrl) { this.submitUrl = submitUrl; } public String getParms() { StringBuffer ps=new StringBuffer(); if(parms!=null && parms.length()>0){ //分离参数 A=b String[] parmsArr=parms.split("&"); for(int i=0;i<parmsArr.length;i++){ String parmstemp=parmsArr[i]; String[] parmsEqArr=parmstemp.split("="); //分离参数 键 值 try { ps.append(i > 0 ? "&" : ""); ps.append(parmsEqArr[0]).append("="); if(parmsEqArr.length>1){ ps.append( URLEncoder.encode(parmsEqArr[1],"UTF-8")); } } catch (UnsupportedEncodingException e) { return ""; } } } return ps.toString(); } public void setParms(String parms) { this.parms = parms; } }
http://download.csdn.net/detail/jilongliang/7302995
搭建请参考
相关推荐
本资源为Spring4+SpringMVC4+Hibernate4整合源码,里面内置了一套对Hibernate底层Dao的封装,分页的封装,由于最近比较忙暂时没时间集成Spring Security。权限部分也还没来的及实现,本套框架的前端打算用bootstrap...
在这个教程中,我们将学习如何结合后端的 SpringMVC 和 Hibernate 框架来使用 BootstrapTable 实现动态数据加载和分页。 首先,SpringMVC 是一个模型-视图-控制器(MVC)框架,它允许开发者将业务逻辑、数据处理和...
此外,预封装的datatables组件简化了后台分页查询的实现。 权限管理方面,框架基于Shiro进行了深度定制,实现了Ehcache的一级缓存和Redis的二级缓存,支持session同步。权限控制深入到按钮和方法级别,且有三套独立...
Spring4 SpringMVC4 Hibernate4 Freemarker Bootstrap3 整合的小DEMO,主要就是一个登录页面,加一个主页面,然后实现增删改查,还有分页的功能 说明:在项目的doc下有数据库文件,新建数据库名为 db_shf,编码设为...
在Spring MVC中,文件上传和...在"Springmvc上传下载分页拦截器"项目中,开发者将这些知识点综合运用,实现了高效、安全且易用的功能。通过学习和实践该项目,我们可以提升对Spring MVC及其相关技术的理解和应用能力。
本教程将详细介绍如何使用IntelliJ IDEA搭建一个基于SSM(Spring、SpringMVC、MyBatis)框架的项目,并集成Bootstrap前端框架,以及实现分页功能。 首先,我们需要创建一个新的Spring Initializr项目。在IntelliJ ...
2.分页查询 3.数据校验 前端验证(JS) 初步验证(JSR303) 4. ajax 5. Rest风格URI: 使用Http协议请求方式的动词,来表示对资源的操作 GET:/ emps / get / {id}查询 GET:/ emps / get查询 开机自检:/ emps / ...
项目可能使用了如MyBatis的PageHelper插件,或者自定义的分页实现,以提高用户体验并减轻服务器负担。 3. **验证控件**:为了确保数据的完整性和安全性,项目可能会使用JSR303/JSR349(Bean Validation)或...
求职者在项目中负责用户注册登录、二手车展示、分页、出售模块和估价模块的开发和设计,这体现了他们对Web开发全栈的理解和实践能力,特别是SpringMVC和Hibernate在企业级应用中的运用。 - **记事本APP**:此项目...
该项目使用的技术栈包括SpringMVC、Hibernate等,小七在此项目中担任主要开发者角色。 2. **记事本APP**:2016年11月至2017年3月,小七参与了锤子简历记事本APP的开发,主要负责对赌计划模块的开发以及记事本后台...
SpringMVC 和 Nutz 是两个不同的 Java Web 开发框架,它们在企业级应用程序中被广泛使用。SpringMVC 是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序,提供了一种灵活的方式...
3. **信息发布管理**:利用jQuery jqGrid展示网格数据,实现Ajax分页、排序、增删查改以及Excel导出,配合Bootstrap Wysiwyg富文本编辑器,Quartz和Lucene进行定时索引和全文检索。 4. **用户管理**:同样使用jQuery...
这里涉及的技术和框架包括JS、Jquery、CSS、SpringMVC、Hibernate、Bootstrap、EasyUI、jQuery、HTML5、ECharts和EL表达式。这些技能体现了他有实际项目经验,且对Web开发的多个方面都有所了解。 - **锤子简历...
JavaEE企业开发框架前端采用最受欢迎的...框架的数据持久层将添加、修改、删除、排序、分页、各种条件的查询封装成通用模块,几乎不用手写SQL。 系统后端和前端全部采用官方的最新稳定版本,可直接应用到企业生产环境。
在SpringMVC中,可以通过查询参数获取当前页码和每页显示的数量,然后配合数据库查询语句(如LIMIT和OFFSET)实现数据分页。 5. **富文本编辑器**: 富文本编辑器如CKEditor或TinyMCE,允许用户在网页上编辑格式化...
在SpringMVC中,我们可以利用JDBC或ORM框架(如Hibernate、MyBatis)来实现分页查询,通过传递页码和每页显示的条目数来控制返回的结果。 富文本编辑器如CKEditor或TinyMCE,为用户提供了一个可视化的文本编辑环境...
SpringMVC框架结合MyBatis或Hibernate等持久层框架,可以方便地实现分页接口,传递当前页数和每页记录数来获取所需的数据。 **3. MySQL数据库** MySQL是一款开源的关系型数据库管理系统,广泛应用于Web应用中。它...
在 SpringMVC 后端,使用 Hibernate 进行分页查询时,可能会遇到 `execute()` 方法的问题。当传入的 `session` 是代理类时,需要调用 `getExecutableCriteria()` 方法来获得可执行的 Criteria 实例。示例代码如下: ...
在 SpringMVC 中,使用 Hibernate 进行分页查询时,可能会遇到 `Criteria` 查询无法直接转换为可执行实例的问题。这时,你需要调用 `getExecutableCriteria()` 方法,传入 `Session` 对象来获取可执行的 `Criteria` ...