先看效果 样式 可以 css 修改 各自 适合 的样式
代码下载位置 :http://download.csdn.net/download/knight_black_bob/8767507
前端效果<page:navigator type="frontPage">
后台效果<page:navigator type="backPage">
<page:navigator type="defaultPage">
效果 看完后,看结构
初始化数据
package baoyou.bean; import java.util.ArrayList; import java.util.List; public class UserPool { private static List<User> userList =new ArrayList<User>(); static { for (int i = 0; i < 100; i++) { User user = new User(); user.setUserId(i); user.setUserName("user"+i); user.setPassword("user"+i); userList.add(user); } } private static UserPool instance; private UserPool(){ } public static synchronized UserPool getInstance() { if (instance == null) { instance = new UserPool(); } return instance; } public List<User> getUserList() { return userList; } public int getCount() { return userList.size(); } //limit #{start},#{pageSize} public List<User> getUserList(PageBean pb) { List<User> list = new ArrayList<User>(); for (int i = 0; i < userList.size(); i++) { if ( pb.getStart() >= 0 && i >= pb.getStart() && i< pb.getStart() + pb.getPageSize() ) { list.add( userList.get(i) ) ; } } return list ; } }
User
package baoyou.bean; public class User { private int userId; private String userName; private String password; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
page/ NavigatorTag
package baoyou.page; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.IOException; /** * 显示导航条,可利用此改变每页的记录数,上下翻页和跳页 使用方法:<page:navigator type='BUTTON'/> * * @author Satan */ @SuppressWarnings("serial") public class NavigatorTag extends TagSupport { /** 导航条的类型(BUTTON/TEXT)(按钮型/文字链接型) */ private String type = "Page"; // 选择导航条类型默认"BUTTON"(BUTTON/TEXT) public void setType(String newType) { type = newType; } public int doStartTag() throws JspException { try { String bar = getNavigatorBar(type); pageContext.getOut().write(bar); return SKIP_BODY; } catch (IOException ioe) { throw new JspException(ioe.getMessage()); } } public int doEndTag() throws JspException { return EVAL_PAGE; } /** * 根据指定类型获得导航条预先设计的导航条 * * @param type * 导航条类型(BUTTON/TEXT) * @return 返回导航条的HTML代码,若指定类型不存在,返回"" */ private String getNavigatorBar(String type) { String bar = ""; String pageNo = ((Integer) pageContext.getAttribute("pageNo")).toString();//第几页 String pages = ((Integer) pageContext.getAttribute("pages")).toString();//总页数 String total = ((Integer) pageContext.getAttribute("total")).toString();//总条数 String pageSize = ((Integer) pageContext.getAttribute("pageSize")) .toString(); String nextDisabled = ""; String prevDisabled = ""; if (Integer.parseInt(pageNo) >= Integer.parseInt(pages)) nextDisabled = "disabled"; if (Integer.parseInt(pageNo) <= 1) prevDisabled = "disabled"; String pageSizeInput = pageSize; String firstText = "<span style='color:#777;'>首 页</span>"; String prevText = "<span style='color:#777;'>上一页</span>"; String nextText = "<span style='color:#777;'>下一页</span>"; String lastText = "<span style='color:#777;'>最后一页</span>"; String nowPage = "<span style='color:#777;'></span>"; String pageNoInput = "<input type='text' maxlength='9' size='3' size='2' value='" + pageNo + "' " + "onChange=\"javascript:this.form.pageNo.value=this.value\">"; if (!type.equalsIgnoreCase("frontPage")) { if (type.equalsIgnoreCase("backPage")) { if (prevDisabled.equalsIgnoreCase("")) { firstText = "<span><a href='first' " + "onClick=\"javascript:document.pager.choice.value='first';document.pager.submit();return false;\">" + "首 页" + "</a></span>"; prevText = "<span><a href='prev' " + "onClick=\"javascript:document.pager.choice.value='prev';document.pager.submit();return false;\">" + "上一页" + "</a></span>"; } if (nextDisabled.equalsIgnoreCase("")) { nextText = "<span><a href='next' " + "onClick=\"javascript:document.pager.choice.value='next';document.pager.submit();return false;\">" + "下一页" + "</a></span>"; lastText = "<span><a href='last' " + "onClick=\"javascript:document.pager.choice.value='last';document.pager.submit();return false;\">" + "最后一页" + "</a></span>"; } bar = "每页pageSize条记录 | \n" + "<span style='color:#777;'>共pages页/total条记录</span> | \n" + "first \n prev \n next \n last \n | <span style='color:#777;'>第pageNo页</span>\n" + " <input type='submit' value='go' onClick=\"javascript:this.form.choice.value='current';\">\n"; }else if(type.equals("defaultPage")){ if (prevDisabled.equalsIgnoreCase("")) { firstText = "<span><a href='first' " + "onClick=\"javascript:document.pager.choice.value='first';document.pager.submit();return false;\">" + "首 页" + "</a></span>"; prevText = "<span><a href='prev' " + "onClick=\"javascript:document.pager.choice.value='prev';document.pager.submit();return false;\">" + "上一页" + "</a></span>"; } if (nextDisabled.equalsIgnoreCase("")) { nextText = "<span><a href='next' " + "onClick=\"javascript:document.pager.choice.value='next';document.pager.submit();return false;\">" + "下一页" + "</a></span>"; lastText = "<span><a href='last' " + "onClick=\"javascript:document.pager.choice.value='last';document.pager.submit();return false;\">" + "最后一页" + "</a></span>"; } bar = "<span style=\"color:#777;text-decoration: none;\">每页pageSize条记录</span> | \n" + "<span style=\"color:#777;\">共pages页/total条记录</span> | \n" + "first \n prev \n next \n last \n <span style=\"color:#777;\">第pageNo页</span>\n "; pageNoInput=pageNo; } bar = StringUtil.replace(bar, "pageSize", pageSizeInput); bar = StringUtil.replace(bar, "pages", pages); bar = StringUtil.replace(bar, "total", total); bar = StringUtil.replace(bar, "first", firstText); bar = StringUtil.replace(bar, "prev", prevText); bar = StringUtil.replace(bar, "next", nextText); bar = StringUtil.replace(bar, "last", lastText); bar = StringUtil.replace(bar, "pageNo", pageNoInput); }else if (type.equalsIgnoreCase("frontPage")) { int i = 1; int totalPages = (Integer) pageContext.getAttribute("pages"); int min = Integer.parseInt(pageNo) - 3; int max = Integer.parseInt(pageNo) + 3; if (min <= 1) { min = 1; max = min + 6; } else { if(Integer.parseInt(pageNo) ==5){ nowPage += "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value=" + 1 + ";document.pager.submit();return false;\">" + 1 + "</a></span>"; } else{ nowPage += "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value=" + 1 + ";document.pager.submit();return false;\">" + 1 + "</a></span>"; nowPage += "<span>...</span>"; } } if (max >= totalPages) { min = max - 6; max = totalPages; } for (i = min; i <= max; i++) { if (i >= 1 && i <= totalPages) { if (i == Integer.parseInt(pageNo)) { nowPage += "<span><a href='#' style='color:red'" + "onClick=\"javascript:document.pager.pageNo.value=" + i + ";document.pager.submit();return false;\">[" + i + "]</a></span>"; } else { nowPage += "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value=" + i + ";document.pager.submit();return false;\">" + i + "</a></span>"; } } } if (max<totalPages) { if((totalPages - Integer.parseInt(pageNo))==4){ nowPage += "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value=" + totalPages + ";document.pager.submit();return false;\">" + totalPages + "</a></span>"; } else{ nowPage += "<span>...</span>"; nowPage += "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value=" + totalPages + ";document.pager.submit();return false;\">" + totalPages + "</a></span>"; } } firstText = "<span><a href='#' " + "onClick=\"javascript:document.pager.pageNo.value="+1+";document.pager.submit();return false;\">" + "<span> << </span>" + "</a></span>"; lastText = "<span><a href='last' " + "onClick=\"javascript:document.pager.pageNo.value="+totalPages+";document.pager.submit();return false;\">" + "<span> >> </span>" + "</a></span>"; bar ="first \n now \n last \n "; bar = StringUtil.replace(bar, "now", nowPage); bar = StringUtil.replace(bar, "first", firstText); bar = StringUtil.replace(bar, "last", lastText); } return bar.toString(); } }
page/ PagerTag
package baoyou.page; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import javax.servlet.http.*; import java.util.*; import java.io.IOException; /** * 分页框架标记 从表单中获得全部参数,予以保存并自动生成对应的<input type=hidden>表单 * 通过计算当前的页号,操作,以及控制每页记录数,提供起始记录号,和每页显示记录数, * 供框架内的程序控制显示起始的记录位置和数量,若中途转出后返回,直接调用该页面即可 恢复原来转出时的情况.若页号超出范围,将自动调成最接近的合理值. * 使用举例: */ @SuppressWarnings("serial") public class PagerTag extends BodyTagSupport { private StringBuffer output; // 保存输出 private int pageNo; // 当前页面 private int pageSize; // 每页记录数 private int index = 0; // 起始记录数,缺省为0 private int pages; // 总页数 @SuppressWarnings("unused") private String queryString; // 保存分页信息和所需传递的其它变量值 @SuppressWarnings("unused") private String prevPage; // 前一页的URL和queryString @SuppressWarnings("unused") private String nextPage; // 下一页的URL和queryString @SuppressWarnings("unused") private String currentPage; // 当前页的URL和queryString @SuppressWarnings("unused") private String firstPage; // 第一页的URL和queryString @SuppressWarnings("unused") private String lastPage; // 最后页的URL和queryString private boolean resume = false; // 是否是恢复操作 private int total = 0; // 记录总数,即需要分页显示的记录总数,初始化默认为0 private int defaultPageSize = 20; // 缺省每页记录数,可在导航条中改变每页记录数的值 private String action; public String getAction() { return action; } public void setAction(String action) { this.action = action; } public void setTotal(int newTotal) { total = newTotal; } public void setDefaultPageSize(int newDefaultPageSize) { defaultPageSize = newDefaultPageSize; } /** * 调用handler进行分页处理 */ public int doStartTag() throws JspTagException { output = new StringBuffer(); resume = false; handler(); return EVAL_BODY_BUFFERED; } /** * 获得标记内的记录列表内容 */ public int doAfterBody() throws JspTagException { BodyContent bodyContent = getBodyContent(); if (bodyContent != null) { output.append(bodyContent.getString()); try { bodyContent.clear(); } catch (IOException ex) { throw new JspTagException("Fatal IO Error"); } } return SKIP_BODY; } /** * 输出标记内的内容 */ public int doEndTag() throws JspTagException { BodyContent bodyContent = getBodyContent(); try { if (bodyContent != null) { // 输出结束标记 output.append("</form>\n"); // 输出全部内容 bodyContent.getEnclosingWriter().write(output.toString()); } } catch (IOException ex) { throw new JspTagException("Fatal IO Error"); } return EVAL_PAGE; } /** * 设置标记内变量(每页记录数,当前页号,起始记录号,表单的查询字符串) */ public void setVariable() { pageContext.setAttribute("pageSize", new Integer(pageSize)); pageContext.setAttribute("pageNo", new Integer(pageNo)); pageContext.setAttribute("total", new Integer(total)); pageContext.setAttribute("pages", new Integer(pages)); pageContext.setAttribute("index", new Integer(index)); } /** * 获取分页信息和其它表单中的变量值并输出表单 */ @SuppressWarnings({ "unchecked", "rawtypes" }) private void handler() { HttpServletRequest request = (HttpServletRequest) pageContext .getRequest(); StringBuffer paramBuf = new StringBuffer(); HttpSession session = (HttpSession) pageContext.getSession(); String totalStr = (String) session.getAttribute("total"); if (totalStr != null) { total = Integer.parseInt(totalStr); // System.out.println("---------------------------------------"+total); } try { String t = (String) session.getAttribute("defaultPageSize"); int n = Integer.parseInt(t); defaultPageSize = n; } catch (Exception e) { // 代表没有设置 默认为20 } String choice = ""; HashMap params = new HashMap(); // 获得当前页的URI @SuppressWarnings("unused") String requestURI = request.getRequestURI(); // 获取操作 choice = ParamUtil.getParameter(request, "choice"); // 判断是否转出后返回需恢复原分页及参数信息(判断依据:GET方式访问且没有提供额外参数) if (choice.equals("") && request.getMethod().equals("GET") && request.getQueryString() == null) { // 是否页面相同 String pageURI = (String) session.getAttribute("pageURI"); if (request.getRequestURI().equalsIgnoreCase(pageURI)) resume = true; else resume = false; } if (resume) { // 处理中途转出后返回的情况 // 从session中取参数 Object obj = session.getAttribute("pagerParameters"); if (obj != null) { params = (HashMap) obj; // 获取每页记录数,若没指定,使用默认值 pageSize = ((Integer) params.get("pageSize")).intValue(); // 获取页号 pageNo = ((Integer) params.get("pageNo")).intValue(); } else { // 提供默认值(一般出在用GET方法查询且不需参数情况的处理,因为条件等同于转出后恢复) pageSize = defaultPageSize; pageNo = 1; } // 设定操作 choice = "current"; // 操作改设为取当前页 } else { // 获取每页记录数,若没指定,使用默认值 pageSize = ParamUtil.getIntParameter(request, "pageSize", defaultPageSize); // 获取页号 pageNo = ParamUtil.getIntParameter(request, "pageNo", 1); } // 每页记录数越界处理 if (pageSize <= 0) pageSize = 1; // 计算总页数 pages = (total % pageSize == 0) ? total / pageSize : total / pageSize + 1; // 根据操作,重新确定当前页号 if (choice.equals("next")) pageNo++; if (choice.equals("prev")) pageNo--; if (choice.equals("first")) pageNo = 1; if (choice.equals("last")) pageNo = pages; // 页号越界处理 if (pageNo > pages) pageNo = pages; if (pageNo <= 0) pageNo = 1; // 起始记录号 index = (pageNo - 1) * pageSize + 1; // 输出表单的头 output.append("<form action='" + action + "' method='post' name='pager'>\n"); Enumeration enum1; String name; String value; if (resume) { // 处理中途转出后返回的情况 // 恢复session中的参数 Collection co = params.entrySet(); if (co != null) { Iterator it = params.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); name = (String) e.getKey(); if (name.equals("pageNo") || name.equals("pageSize") || name.equals("choice")) { // 略过 continue; } value = (String) e.getValue(); paramBuf.append("<input type='hidden' name='" + name + "' value='" + value + "'>\n"); } } } else { // 获取所有提交的参数,并设置表单"<input type='hidden' name='' value=''>" enum1 = request.getParameterNames(); while (enum1.hasMoreElements()) { name = (String) enum1.nextElement(); value = ParamUtil.getParameter(request, name); // 保存查询参数和值 params.put(name, value); if (name.equals("pageNo") || name.equals("pageSize") || name.equals("choice")) { continue; } paramBuf.append("<input type='hidden' name='" + name + "' value='" + value + "'>\n"); } // 保存分页参数和值 params.put("pageNo", new Integer(pageNo)); params.put("pageSize", new Integer(pageSize)); // 保存到session session.setAttribute("pagerParameters", params); // 保存当前的URI session.setAttribute("pageURI", request.getRequestURI()); } // //////end of if(resume) // 输出分页参数表单 paramBuf.append("<input type='hidden' name='pageNo' value='" + pageNo + "'>\n"); paramBuf.append("<input type='hidden' name='pageSize' value='" + pageSize + "'>\n"); paramBuf.append("<input type='hidden' name='choice' value='" + choice + "'>\n"); output.append(paramBuf.toString()); setVariable(); if (resume) { // 转出恢复情况下需重新提交表单 String resend = "<script language='javascript'>" + "document.pager.submit();" + "</script>\n"; output.append(resend); } } }
page/ PageSql
package baoyou.page; public class PageSql { public int getStartIndex(String pageNoStr,String choice,int pageSize,int total) { int index = 0; if (pageNoStr == "" || pageNoStr == null) { pageNoStr = "1"; } else if (!pageNoStr.matches("^[0-9]{0,30}$")) { pageNoStr = "1"; } int pageNo = Integer.parseInt(pageNoStr); int pages = (total % pageSize == 0) ? total / pageSize : total / pageSize + 1; if (choice != null) { if (choice.equals("next")) pageNo++; if (choice.equals("prev")) pageNo--; if (choice.equals("first")) pageNo = 1; if (choice.equals("last")) pageNo = pages; } if (pageNo > pages) pageNo = pages; if (pageNo <= 0) pageNo = 1; index = (pageNo - 1) * pageSize; return index; } }
page/ PageTEI
package baoyou.page; import javax.servlet.jsp.tagext.*; /** * 用于page标记的变量预设 */ public class PageTEI extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[] { new VariableInfo("pageSize", "java.lang.Integer", true, VariableInfo.NESTED), new VariableInfo("pageNo", "java.lang.Integer", true, VariableInfo.NESTED), new VariableInfo("pages", "java.lang.Integer", true, VariableInfo.NESTED), new VariableInfo("index", "java.lang.Integer", true, VariableInfo.NESTED), new VariableInfo("total", "java.lang.Integer", true, VariableInfo.NESTED) }; } }
page/ ParamUtil
package baoyou.page; import javax.servlet.*; public class ParamUtil { /** * 获得request中指定名称的参数值,若有中文乱码问题请增加转码部分 * * @param request * ServletRequest对象 * @param paramName * 参数名称 * @return 如果该变量值存在则返回该值,否则返回"" */ public static String getParameter(ServletRequest request, String paramName) { String temp = request.getParameter(paramName); if (temp != null && !temp.equals("")) { // 若有中文问题,请将下面语句注释 try { temp = new String(temp.getBytes("8859_1"), "UTF-8"); } catch (Exception e) { return ""; } return temp; } else { return ""; } } /** * 获得request中的int型参数值 * * @param request * ServletRequest对象 * @param paramName * 参数名称 * @param defaultNum * 默认值,如果没有返回该值 * @return 如果该参数值存在则返回其转换为int型的值,否则返回defaultNum */ public static int getIntParameter(ServletRequest request, String paramName, int defaultNum) { String temp = request.getParameter(paramName); if (temp != null && !temp.equals("")) { int num = defaultNum; try { num = Integer.parseInt(temp); } catch (Exception ignored) { } return num; } else { return defaultNum; } } }// /////////
page/ StringUtil
package baoyou.page; /** * <p> * Title: 字符串工具类 * </p> * * @version 1.0 */ public class StringUtil { /** * Replaces all instances of oldString with newString in line. * * @param line * the String to search to perform replacements on * @param oldString * the String that should be replaced by newString * @param newString * the String that will replace all instances of oldString * @return a String will all instances of oldString replaced by newString */ public static final String replace(String line, String oldString, String newString) { if (line == null) { return null; } int i = 0; if ((i = line.indexOf(oldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = line.indexOf(oldString, i)) > 0) { buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); return buf.toString(); } return line; } }
page/ PageBean
package baoyou.bean; public class PageBean { private int start; private int pageSize=20; private String sql; private String obj1=""; private String obj2=""; private String obj3=""; private String obj4=""; private String obj5=""; private String obj6=""; private String obj7=""; private String obj8=""; private String obj9=""; public int getStart() { return start; } public void setStart(int start) { this.start = start; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } public String getObj1() { return obj1; } public void setObj1(String obj1) { this.obj1 = obj1; } public String getObj2() { return obj2; } public void setObj2(String obj2) { this.obj2 = obj2; } public String getObj3() { return obj3; } public void setObj3(String obj3) { this.obj3 = obj3; } public String getObj4() { return obj4; } public void setObj4(String obj4) { this.obj4 = obj4; } public String getObj5() { return obj5; } public void setObj5(String obj5) { this.obj5 = obj5; } public String getObj6() { return obj6; } public void setObj6(String obj6) { this.obj6 = obj6; } public String getObj7() { return obj7; } public void setObj7(String obj7) { this.obj7 = obj7; } public String getObj8() { return obj8; } public void setObj8(String obj8) { this.obj8 = obj8; } public String getObj9() { return obj9; } public void setObj9(String obj9) { this.obj9 = obj9; } }
action UserController
package baoyou.action; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import baoyou.bean.User; import baoyou.service.UserService; @Controller public class UserController { @Autowired UserService userService; @RequestMapping(value = "/showUserList") public String showUserList(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, String pageNo, String choice, HttpSession session) { int total = userService.getCount(); int pageSize = 10; session.setAttribute("total", Integer.toString(total)); session.setAttribute("defaultPageSize", Integer.toString(pageSize)); List<User> list = userService.getList(pageNo, choice, pageSize, total); modelMap.put("list", list); return "userlist"; } }
service UserService
package baoyou.service; import java.util.List; import org.springframework.stereotype.Service; import baoyou.bean.PageBean; import baoyou.bean.User; import baoyou.bean.UserPool; import baoyou.page.PageSql; @Service public class UserService { public List<User> getList(String pageNo,String choice, int pageSize, int total){ PageBean pageBean = new PageBean(); int start = new PageSql() .getStartIndex(pageNo, choice, pageSize, total); pageBean.setPageSize(pageSize); pageBean.setStart(start); List<User> userList = UserPool.getInstance().getUserList(pageBean); return userList; } public int getCount(){ return UserPool.getInstance().getCount(); } }
jsp/ userlist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://myself/tags-page" prefix="page"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> </HEAD> <BODY bgcolor="#F8F8F4"> <table> <tbody> <tr> <td width="20%"><strong>用户ID</strong></td> <td width="10%"><strong>用户名</strong></td> <td width="10%"><strong>密码</strong></td> </tr> <c:forEach items="${list}" var="user"> <tr > <td width="20%"><c:out value="${user.userId}" /></td> <td width="10%"><c:out value="${user.userName}" /></td> <td width="10%"><c:out value="${user.password}" /></td> </tr> </c:forEach> </tbody> <tr> <td> <table> <tr> <page:pager action="showUserList.htm"> <td align="right"><page:navigator type="defaultPage"></page:navigator> </td> </page:pager> </tr> </table> </td> </tr> </table> </BODY> </HTML>
tld page.tld
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>page</shortname> <uri>http://myself/tags-page</uri> <info> The tag library of Pager </info> <!--====================page:pager begin=====================--> <tag> <name>pager</name> <tagclass>baoyou.page.PagerTag</tagclass> <teiclass>baoyou.page.PageTEI</teiclass> <bodycontent>JSP</bodycontent> <info> pager tag provide the frame of the page divider </info> <attribute> <name>defaultPageSize</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>action</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <!--======================page:pager end=========================--> <!--====================page:navigator begin=====================--> <tag> <name>navigator</name> <tagclass>baoyou.page.NavigatorTag</tagclass> <bodycontent>JSP</bodycontent> <info> navigator tag output the Navigator bar which pre-designed </info> <attribute> <name>type</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <!--======================page:navigator end=========================--> </taglib>
SpringWeb-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <!-- 自动扫描controller bean,把作了注解的类转换为bean --> <context:component-scan base-package="baoyou" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="jsp/" p:suffix=".jsp"> <property name="order" value="0" /> </bean> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4"> <!-- here --> <servlet> <servlet-name>SpringWeb</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <jsp-config> <taglib> <taglib-uri>http://myself/tags-page</taglib-uri> <taglib-location>/WEB-INF/page.tld</taglib-location> </taglib> </jsp-config> <servlet-mapping> <servlet-name>SpringWeb</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
- **Java**:Spring Boot框架提供了Pageable接口和Page对象,简化了分页的处理。 - **Python**:Django框架使用Paginator类来处理分页。 - **.NET**:ASP.NET MVC和ASP.NET Core框架中都有内置的分页支持。 5. 实现...
对于特殊需求,开发者可以自定义分页控件,实现更复杂的交互或视觉效果,如无限滚动、拖动分页等。 总结,分页控件是数据展示不可或缺的部分,无论在Web前端还是后台系统,都能提升用户体验并优化性能。理解其工作...
- **动态分页大小**:允许用户自定义每页显示的条目数,以满足不同用户的需求。 - **缓存策略**:对于频繁访问的分页数据,可以考虑使用缓存(如Redis)来提高响应速度。 - **错误处理**:确保当用户输入非法页码...
- **服务器框架**:在ASP.NET、Spring Boot等服务器框架中,也内置了分页支持,如Entity Framework的Skip和Take方法,Spring Data JPA的Pageable接口等。 在实际开发中,我们需要根据项目需求、数据规模和团队技术...
2. ASP.NET:在ASP.NET框架中,有多种实现分页的方式,例如使用GridView、ListView等服务器控件,或者自定义分页逻辑。 3. PHP:在PHP中,可以使用内置的PDO或mysqli扩展进行SQL查询时的分页处理,也可以使用第三方...
6. **自定义标签库**:小范分页控件是一个定制的JSP标签库,它提供了丰富的属性和方法,如当前页、总页数、跳转页数等,方便开发者在JSP页面中灵活地展示和控制分页。 7. **样式与交互**:虽然标签库提供了基本的...
4. **自定义分页处理器**: 在Spring MVC中,可以通过实现`HandlerInterceptor`接口,创建一个分页拦截器,统一处理所有分页请求,避免在每个Controller方法中重复代码。 5. **安全考虑**: 在处理分页请求时,要防止...
分页控件是软件开发中常见的一种用户界面元素,它主要用于在大量数据中进行导航,让用户能够逐页浏览,而不是一次性加载所有内容。这既提高了用户体验,也减轻了服务器的负担。下面我们将深入探讨分页控件的工作原理...
这里,`jdbcTemplate`是Spring的JDBC模板,`UserRowMapper`是自定义的结果映射器,将数据库查询结果转换为`User`对象。 前端展示分页信息时,可以使用`PageResult`中的总页数和当前页数,配合HTML和JavaScript,...
如果使用MyBatis,可以自定义插件或使用第三方分页插件如PageHelper,通过拦截器实现分页功能。在Mapper接口中,定义一个返回Page对象的方法,并在XML配置文件中编写对应的SQL。 6. 分页优化 - 分页缓存:对于不...
5. **Pagination Library**:Java社区有众多的分页库,如PageHelper(MyBatis的扩展)、Spring Boot的Spring Data Pagination等,它们简化了分页逻辑,提供了一套完整的解决方案。 6. **前端分页**:除了在后端处理...
在Flex端,可以使用Flex提供的`DataGrid`组件结合自定义的分页控件来展示数据。具体步骤如下: 1. **获取数据**:首先通过HTTP请求调用后端接口,传递页码和每页记录数。 2. **展示数据**:根据返回的数据填充`...
在这个系统中,可能使用了`PageHelper`或自定义的分页插件来实现。分页通常涉及到对SQL查询的封装,以便只获取指定范围的数据,同时返回当前页码、总页数等信息。 **文件结构与功能:** `s2sh_forPage`这个压缩包...
前端页面需要展示分页效果,可以通过Ajax发送请求,获取后台返回的数据和总条数,然后根据这些信息渲染分页控件。 9. **注意事项**: - 考虑性能优化,避免全表扫描,合理使用索引。 - 分页查询时,注意防止SQL...
登录成功后,可以利用Spring Security或自定义的权限管理逻辑,控制用户访问不同的分页内容。 总结来说,这个Demo演示了如何整合SpringMVC、MyBatis和EasyUI来构建一个具有分页功能的Web应用。SpringMVC作为核心的...
7. **前端分页控件**:在用户界面,可以使用Bootstrap的Pagination组件或其他自定义的分页样式,实现分页按钮的渲染和事件监听。 在`ShowLogs`文件中,可能是日志记录或演示分页效果的示例数据。学习此实例时,应...
本项目标题为“分页标签使用java编写”,这意味着我们探讨的是一个用Java实现的分页控件,可能是基于Servlet、JSP或者Spring MVC等Web开发框架。开发者自己创建了这个控件,并希望通过社区的反馈来改进其功能和性能...
3. **自定义组件**:若标准 Dojo 控件无法满足需求,可以基于 Dojo 模块化机制创建自定义组件。 4. **集成其他 Spring 功能**:结合 Spring Security 实现权限控制,或利用 Spring AOP 进行日志记录和异常处理。 综...
4. **API集成**:在Web应用中,你需要将前端日期控件与后端Java API(如Spring MVC)集成,确保选定的日期能正确传输到服务器。 5. **响应式设计**:对于Web应用,日期控件应具有响应式布局,能在不同设备(如桌面...