JAVA

          人生若只如初見,何事秋風(fēng)悲畫扇。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks
          發(fā)現(xiàn)在系統(tǒng)中有好多寫得很好的代碼,也不知道是哪位前輩留下來的.整理一下...
          自定義分頁標簽庫

          1:在配置文件中配置
          <!--?self?Tag?Library?Descriptors?-->
          ??
          <taglib>
          ????
          <taglib-uri>/WEB-INF/self-html.tld</taglib-uri>
          ????
          <taglib-location>/WEB-INF/self-html.tld</taglib-location>
          ??
          </taglib>

          2:在self-html.tld中page標簽的配置
          <tag>
          ????????
          <name>page</name>
          ????????
          <tagclass>com.jbbis.netedu.common.util.taglib.PageTag</tagclass>
          ????????
          <bodycontent>empty</bodycontent>
          ????????
          <info>tag?here</info>
          ????????
          <attribute>
          ????????
          <name>name</name>
          ????????
          <required>true</required>
          ????????
          <rtexprvalue>false</rtexprvalue>
          ????????
          </attribute>????
          ????????
          <attribute>
          ????????
          <name>pageNum</name>
          ????????
          <required>false</required>
          ????????
          <rtexprvalue>false</rtexprvalue>
          ????????
          </attribute>????????
          ????????
          <attribute>
          ????????
          <name>method</name>
          ????????
          <required>false</required>
          ????????
          <rtexprvalue>false</rtexprvalue>
          ????????
          </attribute>????
          ????????
          <attribute>
          ????????
          <name>methodValue</name>
          ????????
          <required>false</required>
          ????????
          <rtexprvalue>true</rtexprvalue>
          ????????
          </attribute>????
          ????????
          <attribute>
          ????????
          <name>form</name>
          ????????
          <required>true</required>
          ????????
          <rtexprvalue>false</rtexprvalue>
          ????????
          </attribute>????????
          ????????
          <attribute>
          ????????
          <name>action</name>
          ????????
          <required>flase</required>
          ????????
          <rtexprvalue>true</rtexprvalue>
          ????????
          </attribute>
          ????????
          <attribute>
          ????????
          <name>returnLevel</name>
          ????????
          <required>flase</required>
          ????????
          <rtexprvalue>true</rtexprvalue>
          ????????
          </attribute>????????????????????????????????????
          ????
          </tag>

          其實從這兒也可以看到在PageTag文件中是一些什么值了...

          3:PageTag中的具體操作(精華全部在這兒啦)
          /*
          ?*?Created?on?2004-6-25
          ?*
          ?
          */

          package?com.jbbis.netedu.common.util.taglib;

          import?java.io.IOException;

          import?javax.servlet.jsp.JspException;
          import?javax.servlet.jsp.JspWriter;
          import?javax.servlet.jsp.tagext.TagSupport;

          import?com.jbbis.netedu.common.page.NullPage;
          import?com.jbbis.netedu.common.page.Page;

          /**
          ?*?
          @author?leo_deng
          ?*
          ?
          */

          public?class?PageTag?extends?TagSupport?{
          ????

          ????
          /*?(non-Javadoc)
          ?????*?@see?javax.servlet.jsp.tagext.Tag#doStartTag()
          ?????
          */

          ????
          private?String?name;
          ????
          private?String?pageNum="pageNum";
          ????
          private?String?method="method";
          ????
          private?String?methodValue;
          ????
          private?String?form="mainForm";
          ????
          private?String?action;
          ????
          private?String?returnLevel;
          ????
          ????
          private?final?int?CONST_FIRST=1;
          ????
          private?final?int?CONST_NEXT=2;
          ????
          private?final?int?CONST_PRIOR=3;
          ????
          private?final?int?CONST_LAST=4;
          ????
          ????
          ????
          ????
          ????
          public?int?doStartTag()?throws?JspException?{
          ????????
          //?TODO?Auto-generated?method?stub
          ????????try{
          ????????????JspWriter?out?
          =?pageContext.getOut()?;
          ????????????Page?page
          =(Page)pageContext.getRequest().getAttribute(name);
          ????????????
          if(page==null)
          ????????????????page
          =NullPage.instance();
          ????????????out.print(getHtml(page.getPageNumber(),page.getPageCount()));
          ????????????out.print(getJs(page.getPageNumber(),page.getPageCount()));
          ????????????
          //jspwriter是一個隱含對象,用于向jsp網(wǎng)頁輸出內(nèi)容。輸出的目標由
          ????????????
          //?pagecontext.getout提供
          ????????????
          ????????????
          //向jsp網(wǎng)頁上下文輸出
          ??????????}
          catch(IOException?ioException){
          ????????????
          throw?new?JspException(ioException.getMessage()?);
          ??????????}
          //catch
          ??????????return(SKIP_BODY);
          ????}

          ????
          /*
          ?????*?<
          ?????*?<!--
          ?????*?function?page_next(){
          ?????*??form.action=""
          ?????*?????form.pageNum=""
          ?????*?????form.method.value=""
          ?????*?????form.submit;
          ?????*?
          ?????*?}
          ?????*?function?page_prior()
          ?????*?function?page_first()
          ?????*?funciotn?page_last()
          ?????*?
          ?????*?//-->
          ?????*?<div?class="listbox_page">
          ????????????<a?class="page"?><img?src="public/icon/first.gif"?alt="首頁"?align="absmiddle"?border="0"?onclick="page_first()"/></a>
          ????????????<a?class="page"?><img?src="public/icon/previous.gif"?alt="上頁"?align="absmiddle"?border="0"?onclick="page_first()"/></a>
          ????????????第<input?class="page_number"?name="pageNum"?value="">????<img?src="page_go.gif"?class="page_go">頁
          ????????????<a?class="page"?><img?src="public/icon/next.gif"?alt="下頁"?align="absmiddle"?border="0"/?onclick="page_next()"></a>
          ????????????<a?class="page"?><img?src="public/icon/last.gif"?alt="末頁"?align="absmiddle"?border="0"/?onclick="page_prior()"></a>
          ????????????共?<span?class="page_sum">1000</span>?頁?
          ????????</div>
          ?????*
          ?????*?
          */

          ????
          private?String?getJs(int?pageNum,int?totalNum){
          ????????StringBuffer?sb
          =new?StringBuffer();
          ????????sb.append(
          "\n<script?language=\"JavaScript\">\n<!--");
          ????????????sb.append(printFunction(
          "page_first",pageNum,totalNum,CONST_FIRST));
          ????????????sb.append(printFunction(
          "page_next",pageNum,totalNum,CONST_NEXT));
          ????????????sb.append(printFunction(
          "page_prior",pageNum,totalNum,CONST_PRIOR));
          ????????????sb.append(printFunction(
          "page_last",pageNum,totalNum,CONST_LAST));
          ????????????getGoJs(sb,pageNum,totalNum);
          ????????sb.append(
          "\n?//-->\n</script>");

          ????????
          return?sb.toString();
          ????}

          ????
          private?void?getGoJs(StringBuffer?sb,int?pageNum,int?totalNum){
          ????????sb.append(
          "function?page_go(obj){\n");
          ????????sb.append(
          "var?page_number=document.getElementById(\"page_number\");\n");
          ????????sb.append(
          "if(?page_number.value?!=?new?Number(page_number.value))return?alert(\"請輸入正確的頁數(shù)\");\n");
          ????????sb.append(
          "if(page_number.value<1)?page_number.value=1;if(page_number.value>");
          ????????sb.append(totalNum);
          ????????sb.append(
          ")page_number.value=");
          ????????sb.append(totalNum);
          ????????sb.append(
          ";\n");
          ????????sb.append(
          "if(page_number.value!="+pageNum+")");
          ????????sb.append(
          "submitForPageNum(obj);\n");
          ????????sb.append(
          "}");
          ????}

          ????
          private?StringBuffer?printFunction(String?function,int?pageNumber,int?totalNumber,int?pageConst){
          ????????StringBuffer?sb
          =new?StringBuffer();
          ????????sb.append(
          "\nfunction?"+function+"(){");
          ????????sb.append(
          "\nevent.returnValue=false;");
          ????????sb.append(printAction());
          ????????sb.append(printMethod());
          ????????
          //sb.append("\n"+this.form+".submit();\n}");
          ????????if(totalNumber>1){
          ????????????
          switch(pageConst){
          ????????????????
          case?CONST_FIRST:
          ????????????????????
          if(pageNumber>1){
          ????????????????????????sb.append(printPageNum(String.valueOf(
          1)));
          ????????????????????????sb.append(
          "\n?submitForPageNum("+this.form+");");
          ????????????????????}

          ????????????????????
          break;
          ????????????????
          case?CONST_LAST:
          ????????????????????
          if(pageNumber<totalNumber){
          ????????????????????????sb.append(printPageNum(String.valueOf(totalNumber)));
          ????????????????????????sb.append(
          "\n?submitForPageNum("+this.form+");");
          ????????????????????}

          ????????????????????
          break;
          ????????????????
          case?CONST_PRIOR:
          ????????????????????
          if(pageNumber>1){
          ????????????????????????sb.append(printPageNum(String.valueOf(pageNumber
          -1)));
          ????????????????????????sb.append(
          "\n?submitForPageNum("+this.form+");");
          ????????????????????}

          ????????????????????
          break;????????????????????????
          ????????????????
          case?CONST_NEXT:
          ????????????????????
          if(pageNumber<totalNumber){
          ????????????????????????sb.append(printPageNum(String.valueOf(pageNumber
          +1)));
          ????????????????????????sb.append(
          "\n?submitForPageNum("+this.form+");");
          ????????????????????}

          ????????????????????
          break;
          ????????????}

          ????????}

          ????????
          ????????sb.append(
          "\n}");
          ????????
          return?sb;????????
          ????}

          ????
          /*
          ????private?StringBuffer?printFunction(String?function,String?pageNum,int?pageConst){
          ????????StringBuffer?sb=new?StringBuffer();
          ????????sb.append("\nfunction?"+function+"(){");
          ????????sb.append("\nevent.returnValue=false;");
          ????????sb.append(printAction());
          ????????sb.append(printMethod());
          ????????sb.append(printPageNum(pageNum));
          ????????//sb.append("\n"+this.form+".submit();\n}");

          ????????????????
          ????????????????sb.append("\n?submitForPageNum("+this.form+");\n}");

          ????????
          ????????sb.append("\n}");
          ????????
          ????????return?sb;
          ????}
          ????
          */

          ????
          private?String?printAction(){
          ????????
          if(this.action!=null)
          ????????????
          return?("\n"+this.form+".action=\""+action+"\";");
          ????????
          else
          ????????????
          return?"";
          ????}

          ????
          private?String?printMethod(){
          ????????
          if(this.methodValue!=null)
          ????????????
          return?("\n"+this.form+"."+this.method+".value=\""+this.methodValue+"\";");
          ????????
          else
          ????????????
          return?"";
          ????}
          ????
          ????
          private?String?printPageNum(String?num){
          ????????
          return?"\n"+this.form+"."+this.pageNum+".value=\""+num+"\";";
          ????}

          ????
          private?String?getHtml(int?pageNum,int?totalNum){
          ????????StringBuffer?sb
          =new?StringBuffer();
          ????????sb.append(
          "\n<a?class=\"page\"?href=\"javascript:void(0)\"?onclick=\"page_first()\"?><img?src=\"public/icon/first.gif\"?alt=\"首頁\"?align=\"absmiddle\"?border=\"0\"?/></a>");
          ????????sb.append(
          "\n<a?class=\"page\"?href='javascript:void(0)'?onclick='page_prior()'?><img?src=\"public/icon/previous.gif\"?alt=\"上頁\"?align=\"absmiddle\"?border=\"0\"?/></a>");
          ????????sb.append(
          "\n第<input?id=\"page_number\"?class=\"page_number\"?name=\"pageNum\"?value=\"");
          ????????sb.append(String.valueOf(pageNum));
          ????????sb.append(
          "\"><button?class='page_go'?onclick='page_go(this.form);'></button>頁????");
          ????????//sb.append(""<img?src=\"page_go.gif\"?class=\"page_go\">");
          ????????sb.append("\n<a?class=\"page\"?href=\"javascript:void(0)\"?onclick=\"page_next()\"><img?src=\"public/icon/next_page.gif\"?alt=\"下頁\"?align=\"absmiddle\"?border=\"0\"/></a>");
          ????????sb.append(
          "\n<a?class=\"page\"?href=\"javascript:void(0)\"?onclick=\"page_last()\"><img?src=\"public/icon/last.gif\"?alt=\"末頁\"?align=\"absmiddle\"?border=\"0\"/></a>");
          ????????sb.append(
          "\n共?<span?class=\"page_sum\">");
          ????????sb.append(String.valueOf(totalNum));
          ????????sb.append(
          "</span>?頁");
          ????????
          return?sb.toString();
          ????}


          ????
          /**
          ?????*?
          @return?Returns?the?pageNum.
          ?????
          */

          ????
          public?String?getPageNum()?{
          ????????
          return?pageNum;
          ????}

          ... ....(other getter and setter method ^_^)????
          }


          4:在JSP布面中導(dǎo)入:
          <%@?taglib?uri="/WEB-INF/self-html.tld"?prefix="netedu"?%>

          5:在JSP頁面中引用:
          <form?name="newsForm"?method="post"?action="<%=request.getContextPath()?%>/portal/newsAction.page"?id="newsForm">
          <!--?TIP008:
          ??翻頁部分
          ?
          -->
          ???
          <div?class="listbox_page">
          ????
          <netedu:page?name="page"?form="newsForm"?/>
          ???
          </div>
          <!--?TIP008:END-->
          ?
          </form>

          6:page文件

          7:其它
          7.1
          可以注意到在標簽的定義文件中用到了名為page_go的css層來美化界面,可能是出于滿足不同用戶對界面的不同要求所以在此沒有對此css定義,你可以在JSP布面中重寫此css.這兒有個可以參考一下.下載
          7.2
          根據(jù)標簽的定義可以看到,此page應(yīng)該放到form中.
          7.3
          根據(jù)在標簽庫中的
          Page?page=(Page)pageContext.getRequest().getAttribute(name);

          語句,可見page應(yīng)該在request.setAttribute("pageattribute",page);中定義.

          7.4
          如何通過對DB的操作得到了page ?通過DB操作可以獲得一系統(tǒng)的data(應(yīng)該注意到了在page文件夾中有個data屬性,高人就是高人^_^),當然在得到這些data之前,先可能得進行一系統(tǒng)邏輯處理,比如說當前頁碼(pagenum),頁長(pagesize)等等.通過這些數(shù)據(jù)就可以得到一個page實例了! ~ ~ :?)

          ... ...

          相關(guān):一個相當好的自定義標簽---分頁(二)

          posted on 2006-03-13 18:50 Jkallen 閱讀(4730) 評論(5)  編輯  收藏 所屬分類: 其它開源

          評論

          # re: 一個相當好的自定義標簽---分頁(一) 2006-03-14 10:09 keith
          代碼不全,下載的東西也不對應(yīng)  回復(fù)  更多評論
            

          # re: 一個相當好的自定義標簽---分頁(一) 2006-03-14 10:17 Jkallen
          現(xiàn)在CSS可以下載了.
          我會找個時間再寫"分頁(二)"的.
          昨天正有事情呢^_^  回復(fù)  更多評論
            

          # re: 一個相當好的自定義標簽---分頁(一) 2007-07-20 15:52 kk
          com.jbbis???
          你是青鳥的嗎?  回復(fù)  更多評論
            

          # re: 一個相當好的自定義標簽---分頁(一) 2009-03-19 10:39 渤海
          你的import com.jbbis.netedu.common.page.NullPage;
          import com.jbbis.netedu.common.page.Page;
          是什么?。『呛?,想不出來  回復(fù)  更多評論
            

          # re: 一個相當好的自定義標簽---分頁(一) 2009-07-20 11:51 df
          NullPage是什么?  回復(fù)  更多評論
            

          主站蜘蛛池模板: 任丘市| 烟台市| 噶尔县| 墨竹工卡县| 麦盖提县| 奉贤区| 容城县| 香港| 色达县| 韶山市| 四子王旗| 灵山县| 南皮县| 泸溪县| 莎车县| 沈阳市| 四会市| 湟中县| 阿拉善盟| 方城县| 长岛县| 靖安县| 澎湖县| 永登县| 新竹县| 内江市| 洞口县| 准格尔旗| 高唐县| 岳西县| 平遥县| 会同县| 昌图县| 南靖县| 阿拉善左旗| 盘山县| 台山市| 丰原市| 青冈县| 龙陵县| 江源县|