《王总大气-Java web项目通用分页标签》

1 篇文章 0 订阅
1 篇文章 0 订阅
《王总大气-Java web项目通用分页标签》
  前言:

         很久很久很久以前,山里有座庙,庙里有个老和尚.....~!靠,sorry走神了。

         其实我想说的是,在很久很久很久以前,森林里有一位白雪公主........七个小...混蛋~!?!又走神了?~!!(这下走得有点远,到国外去了...),sorrysorrysorry

         其实我想说,很久以前就有想写博客的想法了,都不知道写些啥?难道真写庙里的老和尚”...?最近接触到一个新项目,学习到里面的一些思想;终于完成了属于自己的一套分页标签标签,觉得用起来蛮方便的,在此分享一下。


主题:

           Java Web 项目通用灵活分页标签》是一套可用于任何Java Web项目的通用标签,可用在各个项目中独立使用灵活性高,可灵活配置分页的主题样式、长度、模式等。


步骤:

         1.创建java

   2.创建tld文件(放入WEB-INF目录下)

         3. Jsp页面使用标签

 

1.创建java

/**
 *
分页标签
 * @author WangZongHuan
 */
public class SplitPageTag extends SimpleTagSupport{
 /**
  *
显示模式
  */
 private int pageModel = 1;
 
 /**
  *
是否支持查询
  */
 private boolean isQuery = true;
 
 /**
  *
主题颜色
  */
 private String color = "#666666"; //#2A6496 #406518 #F16C32 #406518
 
 /**
  * DIV Class
名称
  */
 private String divClassName = "split_page_tag_" + UUID.randomUUID();
 
 /**
  *
表单中当前页字段ID
  */
 private String pageIndexId;
 
 /**
  *
显示长度
  */
 private int length = 5;
 
 /**
  *
当前页码
  */
 private int pageIndex;
 
 /**
  *
显示条数
  */
 private int pageSize;
 
 /**
  *
总页数
  */
 private int pageCount;
 
 /**
  *
总条数
  */
 private int recordCount;
 
 /**
  *
跳转路径或者表单ID
  */
 private String url;
 
 @Override
 public void doTag() throws JspException, IOException {
  StringBuffer content = new StringBuffer();
  if(recordCount > 0){
   
   if (pageSize > recordCount){
       pageSize = recordCount;
   }
   /**
计算出总页数 */
   pageCount = (recordCount % pageSize == 0) ? recordCount / pageSize : recordCount / pageSize + 1;
   if (pageIndex > pageCount){
       pageIndex = pageCount;
   }
   
   switch (pageModel) {
    case 1:
     content = splitPageTagModel1(isQuery);
     break;
     
    case 2:
     content = splitPageTagModel2(isQuery);
     break;
    
    default:
     content = splitPageTagModel1(isQuery);
     break;
   }
  }else{
   content.append("<div>
没有任何记录!</div>");
  }
  
  getJspContext().getOut().println(content.toString().trim());
 }
 
 /**
  *
第一种分页
  * @param isQuery
是否可以查询
  * @return content
标签内容
  */
 private StringBuffer splitPageTagModel1(boolean isQuery){
  
  //
替换标识
  String REPLACE_FLAG = "###";
  
  //
判断是否为表单提交
  boolean isFormSubmit = isFormSubmit(url);
  
  //
当前页的项
  String CURRENT_PAGE_LI = "<li class=\"number_li current_page_li\">";
  
  //
没有链接的文字项
  String NO_LINK_TEXT_LI = "<li class=\"text_li no_link_li\">";
  //
有链接的文字项
  String LINK_TEXT_LI = "";
  if(isFormSubmit){
   LINK_TEXT_LI = "<li class=\"text_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitForm('" + url + "'," + REPLACE_FLAG + ");\">";   
  }else{
   LINK_TEXT_LI = "<li class=\"text_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitUrl('" + REPLACE_FLAG + "');\">";      
  }
  
  //
没有链接的数字项
  String NO_LINK_NUMBER_LI = "<li class=\"number_li no_link_li\">";
  //
有链接的数字项
  String LINK_NUMBER_LI = "";
  if(isFormSubmit){
   LINK_NUMBER_LI = "<li class=\"number_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitForm('" + url + "'," + REPLACE_FLAG + ");\">";   
  }else{
   LINK_NUMBER_LI = "<li class=\"number_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitUrl('" + REPLACE_FLAG + "');\">";   
  }
  
  StringBuffer content = new StringBuffer();
  content.append("<div class=\""+ divClassName +"\">");
  content.append("<ul>");
  
  //
上一页
  if(pageIndex == 1){
   content.append(NO_LINK_TEXT_LI + "
上一页</li>");
  }else{
   content.append(createLI(isFormSubmit, String.valueOf(pageIndex - 1),"
上一页", LINK_TEXT_LI, REPLACE_FLAG));
  }
  
  //
页数
  if(pageCount <= length){
   
   for(int i = 1; i <= pageCount; i++){
    if(pageIndex == i){
     content.append(CURRENT_PAGE_LI + i + "</li>");
    }else{
     content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
    }
   }
   
  }else{
   
   if(pageIndex < (length/2)+3){
    
    for(int i = 1; i <= length; i++){
     if(pageIndex == i){
      content.append(CURRENT_PAGE_LI + i + "</li>");
     }else{
      content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
     }
    }
    content.append(NO_LINK_NUMBER_LI + "...</li>");
    content.append(createLI(isFormSubmit, String.valueOf(pageCount), String.valueOf(pageCount), LINK_NUMBER_LI, REPLACE_FLAG));
   
   }else if(pageIndex >= pageCount - (length/2)-1){
    
    content.append(createLI(isFormSubmit, String.valueOf(1), String.valueOf(1), LINK_NUMBER_LI, REPLACE_FLAG));
    content.append(NO_LINK_NUMBER_LI + "...</li>");
    for(int i = pageCount - (length-1); i <= pageCount; i++){
     if(pageIndex == i){
      content.append(CURRENT_PAGE_LI + i + "</li>");
     }else{
      content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
     }
    }
   
   }else{
    
    content.append(createLI(isFormSubmit, String.valueOf(1), String.valueOf(1), LINK_NUMBER_LI, REPLACE_FLAG));
    content.append(NO_LINK_NUMBER_LI + "...</li>");
    for(int i = (length/2); i >= 1; i--){
     content.append(createLI(isFormSubmit, String.valueOf(pageIndex - i), String.valueOf(pageIndex - i), LINK_NUMBER_LI, REPLACE_FLAG));
    }
    content.append(CURRENT_PAGE_LI + pageIndex + "</li>");
    for(int i = 1; i <= (length/2); i++){
     content.append(createLI(isFormSubmit, String.valueOf(pageIndex + i), String.valueOf(pageIndex + i), LINK_NUMBER_LI, REPLACE_FLAG));
    }
    content.append(NO_LINK_NUMBER_LI + "...</li>");
    content.append(createLI(isFormSubmit, String.valueOf(pageCount), String.valueOf(pageCount), LINK_NUMBER_LI, REPLACE_FLAG));
    
   }
  }
  
  //
下一页
  if(pageIndex == pageCount){
   content.append(NO_LINK_TEXT_LI + "
下一页</li>");
  }else{
   content.append(createLI(isFormSubmit, String.valueOf(pageIndex + 1), "
下一页", LINK_TEXT_LI, REPLACE_FLAG));
  }
     
  content.append("</ul>");
  
  if(isQuery){
   content.append("<span class=\"text_span\">");
   content.append("
" + pageCount + "  ");
   content.append("
&nbsp;<input type=\"text\" id=\"splitPage_pageNumber\" value=\"" + pageIndex + "\" style=\"height:19px; width:35px; text-align:center;\"/>&nbsp;&nbsp;");
   if(isFormSubmit){
    content.append(" <span class=\"go_span\" οnclick=\"splitPage_query('"+ url +"');\">GO</span>"); 
   }else{
    content.append(" <span class=\"go_span\" οnclick=\"splitPage_query();\">GO</span>");
   }
   content.append("</span>");
  }
  content.append("<div style=\"clear: left;\"></div>");
  content.append("</div>");
  
  //
样式和脚本
  content.append("<script type=\"text/javascript\">")
  
  .append("function splitPage_submitUrl(url){ document.location.href = encodeURI(url); }")
  
  .append("function splitPage_submitForm(formID,pageIndex){var pageIndexId = '" + pageIndexId + "'; if(pageIndexId == 'null' || pageIndexId == \"\"){ alert(\"
表单提交需提供pageIndexId参数!\"); return false; } ")
  .append("var form = document.getElementById(formID); var pageIndexInput = document.getElementById(pageIndexId);")
  .append("if(form == null){ alert(\"
未找到ID\" + formID + \"的表单!\"); return false; }")
  .append("if(pageIndexInput == null){ alert(\"
未找到ID\"+ pageIndexId + \"的文本框!\"); return false; }")
  .append("pageIndexInput.value = pageIndex; form.submit(); }")
  
  .append("function splitPage_query(formID){ var num = document.getElementById(\"splitPage_pageNumber\").value;")
  .append("if (isNaN(num) || num < 1 || num >"+ pageCount +"){ alert(\"
请输入[1-"+ pageCount +"]范围内页码!\"); return false; }")
  .append("if(formID != null && formID != \"\"){splitPage_submitForm(formID,num);} else {var tempUrl = '" + url + "'.replace(\"{0}\",num); splitPage_submitUrl(tempUrl);} }")
  
  .append("function splitPage_over(target){ target.style.color = \"#2A6496\"; target.style.backgroundColor = \"#EEEEEE\"; target.style.cursor = \"pointer\"; target.style.borderColor = \"" + color + "\"; }")
  
  .append("function splitPage_out(target){ target.style.color = \"\"; target.style.backgroundColor = \"\"; target.style.cursor = \"\"; target.style.borderColor=\"\"; }")
  
  .append("</script>")
  
  .append("<style type=\"text/css\">")
  .append("."+ divClassName +"{ margin-top:5px; font-family:\"
宋体\";}")
  .append("."+ divClassName +" ul{ margin:0px; padding:0px; list-style:none; font-size:12px; }")
  .append("."+ divClassName +" ul li{ float:left; margin:0px; border:solid 1px #cccccc; height:22px;")
  .append(" line-height:22px; display:block; margin-left:5px;color:" + color + "; padding:1px 8px 0px 8px; text-align:center; }")
  .append("."+ divClassName +" ul li.number_li{ }")
  .append("."+ divClassName +" ul li.text_li{ }")
  .append("."+ divClassName +" ul li.current_page_li{ background-color:" + color + "; font-weight:bolder; color:#FFFFFF;}")
  .append("."+ divClassName +" ul li.no_link_li{ color:#cccccc; }")  
  .append("."+ divClassName +" .text_span{ font-size:12px; margin:3px 0px 0px 10px; color:#999999; float:left;}")  
  .append("."+ divClassName +" .text_span .go_span{ padding:4px 10px 2px 10px; font-weight:bold; ")  
  .append(" color:#FFFFFF; background-color:" + color + "; cursor:pointer; }")  
  .append("</style>");
  
  return content;
 }
 
 /**
  *
第二种分页
  * @param isQuery
是否可以查询
  * @return content 
标签内容
  */
 private StringBuffer splitPageTagModel2(boolean isQuery){
  StringBuffer content = new StringBuffer();
  content.append("<div>
第二种分页</div>");
  return content;
 }
 
 /**
  *
判断是否表单提交
  * @param url   
提交路径或者表单ID
  * @return  true 
表单提交   false 路径提交
  */
 private boolean isFormSubmit(String url){
  return url.indexOf("{0}") == -1 ? true : false;
 }
 
 /**
  *
创建LI(适用于模型1)
  * @param isFormSubmit        
是否为表单提交
  * @param pageIndex             
当前页码
  * @param linkText                 
链接显示的文字
  * @param LI                           LI
标签前部分
  * @param REPLACE_FLAG  
替换表示符   
  * @return  LI
标签字符串
  */
 private String createLI(boolean isFormSubmit,String pageIndex,String linkText,String LI,String REPLACE_FLAG){
  StringBuffer content = new StringBuffer();
  if(!isFormSubmit){
   String tempUrl = url.replace("{0}", pageIndex); //
将路径中的标识符替换成当前页码
   content.append(LI.replace(REPLACE_FLAG, tempUrl) + linkText + "</li>");
  }else{
   content.append(LI.replace(REPLACE_FLAG, pageIndex) + linkText + "</li>");
  }
  return content.toString();
 }

 public int getPageModel() {
  return pageModel;
 }

 public void setPageModel(int pageModel) {
  this.pageModel = pageModel;
 }

 public int getPageIndex() {
  return pageIndex;
 }

 public void setPageIndex(int pageIndex) {
  if (pageIndex < -1){
      pageIndex = 1;
  }else{
      this.pageIndex = pageIndex;
  }
 }

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  if (pageSize < 1){
      this.pageSize = 1;
  }else{
      this.pageSize = pageSize;
  }
 }

 public int getPageCount() {
  return pageCount;
 }

 public void setPageCount(int pageCount) {
  this.pageCount = pageCount;
 }

 public int getRecordCount() {
  return recordCount;
 }

 public void setRecordCount(int recordCount) {
  this.recordCount = recordCount;
 }

 public boolean getIsQuery() {
  return isQuery;
 }

 public void setIsQuery(boolean isQuery) {
  this.isQuery = isQuery;
 }

 public String getColor() {
  return color;
 }

 public void setColor(String color) {
  this.color = color;
 }

 public int getLength() {
  return length;
 }

 public void setLength(int length) {
  this.length = length;
 }

 public String getPageIndexId() {
  return pageIndexId;
 }

 public void setPageIndexId(String pageIndexId) {
  this.pageIndexId = pageIndexId;
 }

 public String getUrl() {
  return url;
 }

 public void setUrl(String url) {
  this.url = url;
 }
 
}


2.创建tld文件(放入WEB-INF目录下)

<?xml version="1.0" encoding="utf-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

  <tlib-version>1.0</tlib-version>
    <short-name>wzdq</short-name>
    <uri>/wzdq-tags</uri>
   
    <tag>
     <name>splitPage</name>
     <tag-class>org.wzhq.tag.SplitPageTag</tag-class>
     <body-content>scriptless</body-content>
     
     <attribute>
      <description>
显示模式(默认为1</description>
      <name>pageModel</name>
      <required>false</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
主题颜色(默认为#666666</description>
      <name>color</name>
      <required>false</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
显示长度(默认为5</description>
      <name>length</name>
      <required>false</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
是否支持查询(默认为true</description>
      <name>isQuery</name>
      <required>false</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
表单中当前页码字段ID(表单方式提交时必填)</description>
      <name>pageIndexId</name>
      <required>false</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
当前页码</description>
      <name>pageIndex</name>
      <required>true</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
每页显示条数 </description>
      <name>pageSize</name>
      <required>true</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
总条数</description>
      <name>recordCount</name>
      <required>true</required>
      <fragment>true</fragment>
     </attribute>


     <attribute>
      <description>
      
跳转路径或者表单ID(存在{0}代表为跳转路径,不存在时则代表是表单ID ***使用表单提交时必须提供pageIndexId参数;
      
跳转路径格式:http://localhost:8080/MyTag?pageIndex={0}pageIndex是存储当前页的变量名称,
      {0}
为替换符不可变。)
      </description>
      <name>url</name>
      <required>true</required>
      <fragment>true</fragment>
     </attribute>


    </tag>
</taglib>         

 

3.Jsp页面使用标签

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/wzdq-tags" prefix="w" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
 
  <body>
    <w:splitPage pageIndex="${param.pageIndex}" pageSize="5" recordCount="100" url="form" pageIndexId="pageIndex"></w:splitPage>
    <form action="#" id="form">
     <input type="hidden" id="pageIndex" name="pageIndex">
    </form>
  </body>
</html>

 

效果图:

 

下载地址:http://download.csdn.net/download/wangzonghuan/7004641

 

人生有太多的第一次,这是我的第一次,也是你的...~!? 又瞎扯了?!

初次涉猎,多多指教

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值