发现在系统中有好多写得很好的代码,也不知道是哪位前辈留下来的.整理一下... 自定义分页标签库 1:在配置文件中配置
<
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); } /**/ /* * < *
*
第
页
共
1000
页
*
*
*/
private
String getJs(
int
pageNum,
int
totalNum)
{ StringBuffer sb = new StringBuffer(); sb.append( " /n<script language=/" JavaScript/ " >/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}"); 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
" page/ " href=/ " javascript: void ( 0 )/ " οnclick=/ " page_first()/ " >
" public / icon / first.gif/ " alt=/ " 首页/ " align=/ " absmiddle/ " border=/ " 0 / " /> " ); sb.append( " /n
" page/ " href='javascript:void(0)' οnclick='page_prior()' >
" public / icon / previous.gif/ " alt=/ " 上页/ " align=/ " absmiddle/ " border=/ " 0 / " /> " ); sb.append( " /n第
" 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(""
");
sb.append( " /n
" page/ " href=/ " javascript: void ( 0 )/ " οnclick=/ " page_next()/ " >
" public / icon / next_page.gif/ " alt=/ " 下页/ " align=/ " absmiddle/ " border=/ " 0 / " /> " ); sb.append( " /n
" page/ " href=/ " javascript: void ( 0 )/ " οnclick=/ " page_last()/ " >
" public / icon / last.gif/ " alt=/ " 末页/ " align=/ " absmiddle/ " border=/ " 0 / " /> " ); sb.append( " /n共
" page_sum/ " > " ); sb.append(String.valueOf(totalNum)); sb.append( " 页 " ); return sb.toString(); } /** */ /** * @return Returns the pageNum. */ public String getPageNum() { return pageNum; } ... ....(other getter and setter method ^_^) }
4:在JSP布面中导入:
<%
@ taglib uri = " /WEB-INF/self-html.tld " prefix = " netedu "
%>
5:在JSP页面中引用:
<
form
name
="newsForm"
method
="post"
action
="<%=request.getContextPath() %>/portal/newsAction.page
" id="newsForm">
<
div
class
="listbox_page"
>
<
netedu:page
name
="page"
form
="newsForm"
/>
div >
form >
6:page文件
/**/ /* * Created on 2004-6-8 */ package com.jbbis.netedu.common.page; import java.util.Collection; /** */ /** * 分页表示 Bean * 用于前台显示分页数据 * @author qqs */ public interface Page { /** */ /** * whether or not is the last page of list data * 是否为最后一页 * @return */ public boolean isLast(); /** */ /** * 是否为第一页 * @return */ public boolean isFirst(); /** */ /** * List of page data * @return Page data */ public Collection getData(); /** */ /** * List of page data * @return Page data */ public void setData(Collection data); /** */ /** * 当前页数 * @return Page Number */ public int getPageNumber(); /** */ /** * Next page number * if current page is the first page then * return 0; * else * return pageNumber+1; * 下一页的页数 * * @return next page number */ public int getNextPageNumber(); /** */ /** * 前一页的页数 * if previous pge lest than last the first page then * return 0 * esle * return PageNumber - 1 * @return previous page number */ public int getPrevPageNumber(); /** */ /** * Current page size * 当前页的记录数 * @return Current page size */ public int getSize(); /** */ /** * Page size * 定义的每页的页数 * @return */ public int getPageSize(); /** */ /** * Total pages count * 总页数 * @return Total pages count */ public int getPageCount(); /** */ /** * 当前页中第一条记录在数据库中的顺序 * get index of the first data of the page * @return index of the first data of the page */ public int getStartIndex(); /** */ /** * get index of the last data of the page * 当页的最后一条记录在数据库中的顺序 * @return index of the first data of the page */ public int getEndIndex(); /** */ /** * 总的记录数 * @return */ public int getTotalSize(); /** */ /** * 是否为空页 * @return */ public boolean isNull(); }
7:其它 7.1 可以注意到在标签的定义文件中用到了名为page_go的css层来美化界面,可能是出于满足不同用户对界面的不同要求所以在此没有对此css定义,你可以在JSP布面中重写此css.这儿有个可以参考一下.下载 7.2 根据标签的定义可以看到,此page应该放到form中. 7.3 根据在标签库中的
Page page
=
(Page)pageContext.getRequest().getAttribute(name);
语句,可见page应该在request.setAttribute("pageattribute",page);中定义. 7.4 如何通过对DB的操作得到了page ?通过DB操作可以获得一系统的data(应该注意到了在page文件夹中有个data属性,高人就是高人^_^),当然在得到这些data之前,先可能得进行一系统逻辑处理,比如说当前页码(pagenum),页长(pagesize)等等.通过这些数据就可以得到一个page实例了! ~ ~ : ) ... ...