闲来无事,自己弄个jsp的分页组件来玩玩,也就能给新手参考参考了 , 老鸟就可以飘过了!!~~~
先上个效果图吧!!~
其实 也就是把jquery分页插件的 样式给弄了过来!~~~~
代码开始:
首先先创建一个页码的实体类
Pager.java
public class Pager {
private int pagesize=5; //每页显示数
private int start=1; //开始条数
private int end=1; //结束条数
private int sum; //总数
private int curpage=1; //当前页
private int pages=1; //总页数
public int getCurpage() {
return curpage;
}
public void setCurpage(int curpage) {
if(curpage<1)curpage=1;
if(curpage>this.getPages())curpage=this.getPages();
this.curpage = curpage;
}
public int getEnd() {
end=this.getStart()+pagesize;
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getPages() {
if(sum%pagesize==0){
pages=sum/pagesize;
}else{
pages=sum/pagesize+1;
}
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getStart() {
start=(this.getCurpage()-1)*pagesize+1;
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
}
PagerTag.java 自定义标签
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
public class PagerTag extends TagSupport {
private static final long serialVersionUID = 183373550159351609L;
private Pager pager;
private String urlstart;
private String urlend;
public PagerTag() {
}
public int doStartTag() throws JspException {
try {
String bar=getNavigatorBar();
pageContext.getOut().write(bar);
return SKIP_BODY;
} catch (IOException e) {
e.printStackTrace();
throw new JspException(e);
}
}
private String getNavigatorBar()
{
StringBuffer bar=new StringBuffer();
/** 下载包中此处未修改 ,请手动修改一下 **/
/** 下载包中此处未修改 ,请手动修改一下 **/
if( pager==null){
pager = new Pager();
}
/** 下载包中此处未修改 ,请手动修改一下 **/
int curpage = pager.getCurpage();//当前页
int pages = pager.getPages();//总页数
/**
* 第一页
*/
//如果是第一页
if(curpage == 1){
bar.append("<span class='current prev'>Prev</span>")
.append("<span class='current'>1</span>");
}else{
bar.append("<a href='"+urlstart+(curpage-1)+urlend+"'>Prev</a>")
.append("<a href='"+urlstart+1+urlend+"'>1</a>");
}
/**
* 结束(第一页)
*/
//如果总页数小于11
if(pages <= 11){
for(int i =2 ; i<pages;i++){
if(curpage==i){
bar.append("<span class='current'>"+i+"</span>");
}else{
bar.append("<a href='"+urlstart+i+urlend+"'>"+i+"</a>");
}
}
}else{//总页数大于11
if(curpage <=6){ //当前页小页等于6时 (页码要与前面的街上)
for(int i=2;i<=7;i++){
if(curpage==i){
bar.append("<span class='current'>"+i+"</span>");
}else{
bar.append("<a href='"+urlstart+i+urlend+"'>"+i+"</a>");
}
}
bar.append("<span>....</span>");
bar.append("<a href='"+urlstart+(pages-1)+urlend+"'>"+(pages-1)+"</a>");
}else if(curpage>=pages-5){ //当前页大于最大页-5时 要与后面的接上
bar.append("<a href='"+urlstart+2+urlend+"'>"+2+"</a>");
bar.append("<span>....</span>");
for(int i=pages-5-3;i<=pages-1;i++){
if(curpage==i){
bar.append("<span class='current'>"+i+"</span>");
}else{
bar.append("<a href='"+urlstart+i+urlend+"'>"+i+"</a>");
}
}
}else{
bar.append("<a href='"+urlstart+2+urlend+"'>"+2+"</a>");
bar.append("<span>....</span>");
for(int i=curpage-3;i<=curpage+3;i++){
if(curpage==i){
bar.append("<span class='current'>"+i+"</span>");
}else{
bar.append("<a href='"+urlstart+i+urlend+"'>"+i+"</a>");
}
}
bar.append("<span>....</span>");
bar.append("<a href='"+urlstart+(pages-1)+urlend+"'>"+(pages-1)+"</a>");
}
}
/**
* 最后一页
*/
//如果是最后一页
if(curpage == pages){
bar.append("<span class='current'>"+pages+"</span>")
.append("<span class='current next'>Next</span>");
}else{
bar.append("<a href='"+urlstart+pages+urlend+"'>"+pages+"</a>")
.append("<a href='"+urlstart+(curpage+1)+urlend+"'>Next</a>");
}
bar.append("<select style='height:26px;text-align: center;padding: 0.3em 0.5em;' οnchange=\"location.href='"+urlstart+"'+this.value+'"+urlend+"'\">");
for(int i=1;i<=pages;i++){
if(curpage==i){
bar.append("<option value='"+i+"' selected='selected'>").append("第"+i+"页").append("</option>");
}else{
bar.append("<option value='"+i+"'>").append("第"+i+"页").append("</option>");
}
}
bar.append("</select>");
return bar.toString();
}
public int doEndTag() throws JspTagException
{
return EVAL_PAGE;
}
public Pager getPager() {
return pager;
}
public void setPager(Pager pager) {
this.pager = pager;
}
public String getUrlend() {
return urlend;
}
public void setUrlend(String urlend) {
this.urlend = urlend;
}
public String getUrlstart() {
return urlstart;
}
public void setUrlstart(String urlstart) {
this.urlstart = urlstart;
}
}
在WEB-INF 下创建 pages.tld 文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglib_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>papa</shortname> <!--====================pager:pagebar=====================--> <tag> <name>pager</name> <tagclass>com.test.PagerTag</tagclass> <bodycontent>JSP</bodycontent> <info>pager tag provide the frame of the page divider</info> <attribute> <name>pager</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>urlstart</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>urlend</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>css</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib>
在页面中的应用
<%@ taglib prefix="pages" uri="/WEB-INF/pages.tld" %> <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="pagination.css" /> </head> <body> <div class="pagination"> <pages:pager pager="${pager}" urlend="" urlstart="PageServlet?curpager="></pages:pager> </div> </body> </html>
PageServlet.java
package com.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
Pager pager = new Pager();
String curpager= request.getParameter("curpager");
pager.setPagesize(5);
pager.setSum(357);
pager.setCurpage(Integer.parseInt(curpager));
request.setAttribute("pager", pager);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
使用说明:
pager.setPagesize(5); //在应用中 需要设置 每页显示的数量
pager.setSum(357); // 设置总数量
pager.setCurpage(Integer.parseInt(curpager)); //设置当前页
在后台查询中直接获得
pager.getStart(); //从第几条开始显示
pager.getEnd(); //第几条结束
例如 forumdisplay.jsp?page=2 &fid=55
2是页码
<pages:pager pager="${pager}" urlend="" urlstart="PageServlet?curpager="></pages:pager>
urlstart=" forumdisplay.jsp?page=" //页码的前一部分
urlend="&fid=55" //页码的后一部分
具体看代码 比较简单 都有注释````