一个相当好的自定义标签---分页(一)
发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的.整理一下...
自定义分页标签库
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网页输出内容。输出的目标由
????????????//?pagecontext.getout提供
????????????
????????????//向jsp网页上下文输出
??????????}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?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????<a?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????<a?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????第<input?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????<a?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????<a?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????????共?<span?style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140140/2720/20140127152023185.gif">????????</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(\"请输入正确的页数\");\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}");
????
/**//*
????/**//*?(non-Javadoc)