发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的.整理一下...
自定义分页标签库
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 class="listbox_page">
<a class="page" ><img src="public/icon/first.gif" alt="首页" align="absmiddle" border="0" οnclick="page_first()"/></a>
<a class="page" ><img src="public/icon/previous.gif" alt="上页" align="absmiddle" border="0" οnclick="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"/ οnclick="page_next()"></a>
<a class="page" ><img src="public/icon/last.gif" alt="末页" align="absmiddle" border="0"/ οnclick="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(\"请输入正确的页数\");\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}");