一个对等好的自定义标签-分页(一)
一个相当好的自定义标签---分页(一)
<!-- self Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/self-html.tld</taglib-uri>
<taglib-location>/WEB-INF/self-html.tld</taglib-location>
</taglib>
<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>

/*
* 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" 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(\"请输入正确的页数\");\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}");
发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的.整理一下...
自定义分页标签库
1:在配置文件中配置
2:在self-html.tld中page标签的配置
其实从这儿也可以看到在PageTag文件中是一些什么值了...
3:PageTag中的具体操作(精华全部在这儿啦)