📄 splitpage.java
字号:
package com.yiwu.bbs.common;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**通用分页标签;
*@author 周盼;
*@version 1.1;
*@param customparam 自定义参数,适应于筛选条件下的分页情况
*/
public class splitPage extends TagSupport
{
/**
*
*/
private static final long serialVersionUID = -4039734773981194291L;
private int curPage = 1; //当前页
private int PageCount = 1; //总页数
private String pageSize = "10"; //分页大小
public void setPageSize(String pageSize){this.pageSize = pageSize;}
private int jg = 5; //间隔
public void setJg(int jg) {this.jg = jg;}
private String count = ""; //记录总数
public void setCount(String count){this.count = count;}
private String txtStyle = null;
private String tmp_txtStyle;
private String tmp_aStyle;
private String url = "";
private String customparam="";
public void setCustomparam(String customparam){this.customparam = customparam;}
private String aStyle = null;
public void setTxtStyle(String txtStyle){
this.txtStyle = txtStyle;
}
public void setaStyle(String aStyle){
this.aStyle = aStyle;
}
private String str(int i)
{
if (curPage == i) //当前页判断
return "<font color=red " + tmp_txtStyle + "><b>" + i + "</b></font> ";
else
return "<a href=?page=" + i + url + tmp_aStyle + ">" + i + "</a> "; //非当前页
}
private String PageCode() //需要循环页码部分
{
StringBuffer SplitPageContent = new StringBuffer();
int i;
if (curPage <= jg) // 前N页
{
int tempNum = PageCount < jg * 2 ? PageCount: jg * 2;
for (i = 1; i <= (tempNum); i++)
SplitPageContent.append(str(i));
}
else if ((curPage + jg) > PageCount) // 后N页
{
int tempNum = PageCount - jg * 2 + jg / 2 - 1;
tempNum = tempNum < 1 ? 1 : tempNum;
for (i = (tempNum); i <= (PageCount); i++)
SplitPageContent.append(str(i));
}
else // 中间页
for (i = (curPage - jg); i <= (jg + curPage - 1); i++)
SplitPageContent.append(str(i));
return SplitPageContent.toString();
}
private String SelectMenu() //分页标签输入端信息
{
StringBuffer s = new StringBuffer();
s.append("<script>function gxw(sform,evnt){if(evnt.keyCode==13)checksearch(sform,evnt); } function checksearch(sform,evnt){"
+"sform=sform.pagenum;if(sform.value==\"\" || sform.value==\"0\"){"
+"alert('请输正确入页数!');sform.value='';sform.focus();return false;}"
+"\nif(isNaN(sform.value)){alert('请输入数字!');sform.value='';sform.focus();return false;}"
+ "pages=(parseInt(sform.value)>"+PageCount+")?"+PageCount+":sform.value;"
+"pages=(pages<1)?1:pages;location=\"?page=\" + pages + \""+ this.url +"\";return false;}</script>");
s.append("<form action='#'style='display:inline' onsubmit='return false;'>到第<input name='pagenum' id='pagenum' type='text' size='3' maxlength='3' onkeypress='gxw(this.form,event)'/> 页");
s.append("<input type='image' src='/bbs/img/btn_ok.gif' onclick='checksearch(this.form,event);' "
+"alt='翻指定的页码' title='翻指定的页码' class='handcursor'/></form>");
return s.toString();
}
private String ShowSplitPageInfoAndStyleA() //分页标签A端信息
{
StringBuffer retStr = new StringBuffer();
retStr.append("<font" + tmp_txtStyle + ">共有" + (PageCount) + "页 " + count + "条记录");
// retStr.append("<font face=Webdings><a href=?page=1&" + url + "" + tmp_aStyle
// + ">9</a> <a href=?page=" + (curPage<=1?1:curPage - 1) + "&"
// + url + tmp_aStyle + ">7</a></font> ");
retStr.append("<a href=?page=1" + this.url + "" + tmp_aStyle
+ "><img src='/wholesale/images/icon4.jpg' title='第一页'/></a> <a href=?page=" + (curPage<=1?1:curPage - 1)
+ this.url + tmp_aStyle + "><img src='/wholesale/images/icon.jpg' title='上一页'/></a>");
return retStr.toString();
}
private String ShowSplitPageInfoAndStyleC() //分页标签C端信息
{
StringBuffer retStr = new StringBuffer();
retStr.append("<a href=?page="+ (curPage>=PageCount?PageCount:curPage + 1)+ this.url +tmp_aStyle
+ "><img src='/wholesale/images/icon2.jpg' title='下一页'/></a> <a href=?page="
+ PageCount + this.url + tmp_aStyle+ "><img src='/wholesale/images/icon3.jpg' title='第后一页'/></a>");
return retStr.toString();
}
@Override
public int doStartTag()
{
long recordsetCount = Function.CheckNumber(count);
int tmp_pageSize = (int) Function.CheckNumber(pageSize);
if (recordsetCount <= tmp_pageSize)
return EVAL_BODY_INCLUDE;
else
{
try
{
tmp_txtStyle = (txtStyle == null) ? "" : " class=" + txtStyle + " ";
tmp_aStyle = (aStyle == null) ? "" : " class=" + aStyle; // 创建样式字符
String[] RexString = { "((^page|&page)=\\d*)&{0,1}","\\d*" };
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
String urlAll = request.getQueryString(); // 原始字符
url = Function.RexReplace(RexString[0], urlAll); //链接追加字符
if(url==null||url.equals("")){
if(customparam!=null&&!customparam.equals("")){
url="&"+customparam;
}
}else{
if(customparam!=null&&!customparam.equals("")){
String[] t=customparam.split("=");
if(t.length>0){
int start=url.indexOf(t[0]);
if(start>=0){
url="&"+Function.RexReplace(url.substring(start),url)+customparam;
}else{
url="&"+url+"&"+customparam;
}
}
}
}
String tmp_page = Function.RexRetString(RexString[0],urlAll, "'"); //取出所有符合匹配模式的参数
String[] tmp_ary = tmp_page.split("\\'");
if (tmp_ary.length >= 1)
curPage = (int) Function.CheckNumber(Function.RexRetString(RexString[1], tmp_ary[0],""));
float sCount = recordsetCount;
float sPageCount = (sCount / tmp_pageSize); //带余数的页数
PageCount = (int) (sCount / tmp_pageSize); //整数页数
PageCount = sPageCount > PageCount ? PageCount + 1: PageCount; //如果有余数则取整+1
if (curPage <= 0)
curPage = 1;
else if (curPage >= PageCount)
curPage = PageCount;
/*==========================组装分页标签=============================*/
JspWriter out = pageContext.getOut();
out.append("<div class='pagechange'>");
out.append(ShowSplitPageInfoAndStyleA()); //写入分页标签A端部分
out.append(" "+PageCode()+" "); //写入分页标签中间部分
out.append(ShowSplitPageInfoAndStyleC()); //写入分页标签C端部分
out.append(SelectMenu()); //写入跳转菜单
out.append("</div>");
} catch (Exception e){
System.out.print(e.getMessage());
}
}
return (EVAL_BODY_INCLUDE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -