pagetag.java

来自「采用web2.0技术,采用动态标签,sql语句全部存储在数据库里面.开发速度快.」· Java 代码 · 共 160 行

JAVA
160
字号

package com.sztheater.web.taglib;
import java.text.DateFormat;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.util.*;
import com.sztheater.framework.util.*;
public class PageTag extends BodyTagSupport {
	private String  m_item = null ;
	private int     m_pageSize = 6 ; //每页行数
	private int     m_pageNum  = 5 ; //显示页数
	private int     m_pageNo   = 0 ; //第几页
	private int     m_recCount = 0 ; //总记录数
	
	public int doStartTag() throws JspException {
		String rs_name = "q";
		String class_name = "";
		if (m_item==null || m_item.trim().equals("")) return EVAL_PAGE;
		int iPos = 0;
		try {
			iPos = m_item.indexOf(".");
			if (iPos<0) return EVAL_PAGE;
			String dict_name = m_item.substring(0,iPos);
			rs_name   = m_item.substring(iPos + 1);
			Object obj = pageContext.getRequest().getAttribute( dict_name);
			if (obj==null) return EVAL_PAGE;
			class_name = obj.getClass().getName();
			if( class_name.indexOf("ValueObject")<0)return EVAL_PAGE;
			ValueObject dataPack = (ValueObject)obj;
			this.m_pageSize = dataPack.getPageInfo(rs_name ,"pagesize"   );
			this.m_pageNo   = dataPack.getPageInfo(rs_name ,"pageno"     );
			this.m_recCount = dataPack.getPageInfo(rs_name ,"recordcount");
		}catch(Exception e) {
		}
		return EVAL_PAGE;
	}
	public int doEndTag() throws JspException {
		JspWriter jspWriter = pageContext.getOut();
		try {
			String strHTML = getPageInfo(pageContext , m_pageSize,m_pageNum,m_pageNo,m_recCount);
			jspWriter.print(strHTML);
		}catch(Exception e) {
			try{
				jspWriter.print("doStartTag <br>" + e.getMessage() );
			}catch(Exception e1) {
			}
		}
		return EVAL_PAGE;
	}
	
	public void setItem(String item) {
		this.m_item = item;
    }
    public void setPageSize(int pageSize) {
		this.m_pageSize = pageSize;
    }
    public void setPageNum(int pageNum) {
		this.m_pageNum = pageNum;
    }
    public void setRecCount(int recCount) {
		this.m_recCount = recCount;
    }
    public void setPageNo(int pageNo) {
		this.m_pageNo = pageNo;
    }
	public static String getPageInfo(PageContext pc,int iSize,int iNum,int iNo,int iRecNum){
		//入参数校验
		if (iRecNum<1){
			return "共 "+iRecNum+" 行记录";
		}
		if (iSize  <1) iSize  = 8;
		if (iNum   <1) iNum   = 5;
		if (iNo    <1) iNo    = 1;
		if (iRecNum<0) iRecNum= 0;
		
		//主要变量定义
		int iPages  = 0; //总页数
		int iTop    = 0; //当前区域最大页序号
		int iBottom = 0; //当前区域最小页序号
		int iArea   = 0; //当前区域
		int iAreas  = 0; //当前区域
		
		//求总页数
		iPages = (iRecNum + iSize -1 )/iSize;
		if (iNo > iPages) iNo = iPages;
		//求当前页所在区域号
		iArea  = (iNo   + iNum  - 1)/iNum ;
		iAreas = (iPages+ iNum  - 1)/iNum ;
		iTop   = (iArea ) * (iNum) ; 
		iBottom= (iArea - 1) * (iNum) + 1;
		if ( iBottom< 1     ) iBottom = 1;
		if ( iTop   >iPages ) iTop    = iPages;
		
		//按照要求输出结果
		int iLoop = 0;
		StringBuffer sbResult = new StringBuffer("");		
		//存在多个该标签时,只打印一次javascript包含
		if (null == pc.findAttribute("hasPage.js")) {
			pc.setAttribute("hasPage.js", "true");
			sbResult.append("<script language=javascript src='/res/js/page.js'></script>");
		}
		sbResult.append("\t共 "+iRecNum+" 行记录&nbsp&nbsp页次&nbsp"+iNo+"/"+iPages+"(每页&nbsp"+ iSize +"&nbsp行)\n");
		//显示当前区域最后页号与首页信息
		if (iArea<2) {
			sbResult.append("<font face=webdings >9</font>\n");
			sbResult.append("<font face=webdings >7</font>\n");
		}else{
			sbResult.append("<a href=javascript:fucHrefPage(1"             +")><font face=webdings >9</font></a>\n");
			sbResult.append("<a href=javascript:fucHrefPage("+(iBottom-1)  +")><font face=webdings >7</font></a>\n");
		}
		//显示当前区域页码信息
		for (iLoop=iBottom;iLoop<=iTop;iLoop++) {
			//sbResult.append(" " + iLoop );
			if (iNo==iLoop){
				sbResult.append("\t<b><font color=\"#FF0000\">" + iLoop + "</font></b>\n");
			}else{
				sbResult.append("\t<a href=\"javascript:fucHrefPage("+ iLoop +")\"><b>" + iLoop +"</b></a>\n");
			}
		}
		if (iArea==iAreas) {
			sbResult.append("<font face=webdings >8</font>\n");
			sbResult.append("<font face=webdings >:</font>|\n\n");
		}else{
			sbResult.append("<a href=\"javascript:fucHrefPage(" + (iTop+1)  +")\"><font face=webdings >8</font></a>\n");
			sbResult.append("<a href=\"javascript:fucHrefPage(" +  iPages   +")\"><font face=webdings >:</font></a>\n");
		}
		sbResult.append("\t<input type=\"text\"   name=\"PAGE_NO\"   class=\"INPUT_STYLE\" value=\"" + iNo   + "\" maxLength=2 size=2 >\n");
		sbResult.append("\t<input type=\"button\" class=\"btnSolid\" \n\tonClick=\"javascript:fucHrefPage(null)\" value=\"go\">\n");
		String vExcept = ";pagesize;page_size;para_pagesize;para_page_size;PAGE_NO;pageno;page_no;para_pageno;para_page_no;REFRESH_LIST;";
		sbResult.append(getHTMLFromRequest(pc,vExcept));
		return sbResult.toString();
	}
	public static String getHTMLFromRequest(PageContext pc, String vExcept){
		if (pc==null) return "";
		if (vExcept!=null){
			vExcept = vExcept.trim().toLowerCase();
			if(vExcept.equals("")) vExcept = null;
		}
		Enumeration paranames =pc.getRequest().getParameterNames();
		StringBuffer sbHTML = new StringBuffer("");
		while(paranames.hasMoreElements()){
			String paraName = (String)paranames.nextElement();
			if (paraName==null || paraName.trim().equals("")) continue;
			paraName = paraName.trim();
			String str = ";"+paraName.toLowerCase()+";";
			if ( vExcept.indexOf(str)>-1) continue;
			String paraValue = pc.getRequest().getParameter(paraName);
			if (paraValue==null) continue;
			
			sbHTML.append("<input type=\"hidden\" name=\"");
			sbHTML.append(paraName);
			sbHTML.append("\" value=\"");
			sbHTML.append(paraValue);
			sbHTML.append("\">\n");
		}
		return sbHTML.toString();
	}
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?