⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 operatepage.java

📁 通用的jsp分页组件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package Action;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import common.Tools;

public class OperatePage implements IOperatePage{
	//表单名,如未设置,将把分页数据装在名为"form1"的表单中
	private String formName = "";
	//分页时跳转的页面url
	private String pageUrl = "";
	//数据容器,传sql时不必设
	private Vector dataVector;
	//数据连接,传sql时必需设置
	private Connection con;	
	//分页表格标题头
	private String[] contentTitle;
	//行选择时的元素名,在设定选择模式时有效,默认为checkboxItem
	private String selectItemName = "checkboxItem";
	//行选择类型,单选和多选两种,在设定选择模式时有效,默认为多选
	private int selectType = OperateConst.SELECT_TYPE_CHECKBOX;
	//翻页跳转类型,到jsp和到Action两种(默认到jsp)
	private int forwardType = OperateConst.FOWARD_TYPE_JSP;
	//行选择时每行数据的值,与数据列对应,各列数据以;分隔(默认第一列)
	private int [] selectKeyArray = {1};
	//是否为选择模式,如为true,分页表格头列将加单选或多选按钮(默认为true)
	private boolean hasSelectItem = true;
	
    //用户是否未设置formName,组件自我控制逻辑,用户不必关心该属性
	private boolean isSelfForm ;
	
	/**
	 * @param pm_iPageSize  页大小
	 * @param pm_iPageIndex 页码
	 * @param pm_vecContent 数据内容
	 * @param request       SevletRequest
	 * @param response      SevletResponse
	 * @return 数据库分页后的Table HTML(带分页按钮)
	 * @throws OperateException 
	 */
	public String getContentHtml(int pm_iPageSize, int pm_iPageIndex, HttpServletRequest request, HttpServletResponse response) throws OperateException {
		
		StringBuffer strBuf = new StringBuffer("");
		int pageSize=pm_iPageSize;
		int pageIndex=pm_iPageIndex;
		String pageUrlReal = this.pageUrl;
				
		//检查必要设置
		if(this.contentTitle == null)  /*如未设置标题头,抛出异常*/
		{
			throw new OperateException(OperateConst.EXCEPTION_TYPE_TITLE_IS_NULL);
			
		}
		if(this.pageUrl == null)   /*如传递的跳转页面为空,抛出异常*/
		{
			throw new OperateException(OperateConst.EXCEPTION_TYPE_URL_IS_NULL);
		}
		if(this.dataVector == null) /*如未设置待分页数据,抛出异常*/
		{
			throw new OperateException(OperateConst.EXCEPTION_TYPE_DATA_VECTOR_IS_NULL);
		}
		
		
		// 判断是第一次进入还是翻页操作,设置相应的pageSize和pageIndex
		if(request.getParameter("pageSizeText")==null)
		{
			pageSize = pm_iPageSize;
					
		}
		else if(!request.getParameter("pageSizeText").equals(""))
		{
			pageSize = Integer.parseInt(request.getParameter("pageSizeText"));
		}
		if(request.getParameter("pageIndex")==null)
		{
			pageIndex = pm_iPageIndex;
		}
		else if(request.getParameter("pageIndex")!=null)
		{
			pageIndex = Integer.parseInt(request.getParameter("pageIndex"));
		}
		
		//如跳转类型为Action,在url中加flag=pageOperate参数以便在用户的Action中标识跳转操作(默认为跳转到原jsp)
		if(this.forwardType == OperateConst.FOWARD_TYPE_ACTION)
		{
			pageUrlReal = this.pageUrl+"?flag=pageOperate&";
		}
		else if(this.forwardType == OperateConst.FOWARD_TYPE_JSP)
		{
			pageUrlReal = this.pageUrl+"?";
		}
		
		//如未设置form名,则将分页数据封装在名为"form1"的表单中
		if(this.getFormName().equals(""))
		{
			this.setFormName("form1");
			this.setSelfForm(true);
			strBuf.append("<form name="+this.formName+" action='' method=post>");
			strBuf.append("\n");
		}
		else if( (!this.getFormName().equals(""))&&this.isSelfForm==true)
		{
			this.setFormName("form1");
			strBuf.append("<form name="+this.formName+" action='' method=post>");
			strBuf.append("\n");
		}
		
		//主体操作
		Vector vecContent = this.dataVector;
		strBuf.append("<table width=100% cellspacing=1 cellpadding=0 background=blue>");
		//表格标题栏
		strBuf.append("<tr >");
		if(this.hasSelectItem)
		{
			strBuf.append("<td >");
			if(this.selectType == OperateConst.SELECT_TYPE_CHECKBOX)
			{
				strBuf.append("<input type='checkbox' name='checkAll' onclick='doSelectAll();'/>");
			}
			strBuf.append("</td>");
		}
		
		for(int i=0;i<contentTitle.length;i++)
		{
			strBuf.append("<td>"+contentTitle[i]+"</td>");			
		}
		strBuf.append("</tr>");
		
		
		//表内容
		//分页操作
		int totalCount = vecContent.size();
		int totalPage = totalCount/pageSize;
		if(totalPage*pageSize<totalCount)
		{
			totalPage = totalPage + 1;
		}
		
		int beginIndex = pageIndex*pageSize ;
		int endIndex = beginIndex + pageSize - 1;
		if(endIndex >= totalCount)
		{
			endIndex = totalCount -1;
		}
		
		
		for(int i=beginIndex;i<=endIndex;i++)
		{
			Vector tmp = (Vector)vecContent.get(i);
			strBuf.append("<tr>");
			if(this.hasSelectItem)  /*如设置行选择,增加selectItem列*/
			{
				strBuf.append("<td>");
				if(this.selectType == OperateConst.SELECT_TYPE_CHECKBOX)
				{
					strBuf.append("<input type='checkbox' name='"+this.getSelectItemName()+"' value='");
					for(int k=0;k<this.selectKeyArray.length;k++)
					{
						strBuf.append(tmp.get(selectKeyArray[k]-1)+";");
					}
					strBuf.append("'/>");
				}
				else if(this.selectType == OperateConst.SELECT_TYPE_RADIOBUTTON)
				{
					strBuf.append("<input type='radio' name='"+this.getSelectItemName()+"' value='");
					for(int k=0;k<this.selectKeyArray.length;k++)
					{
						strBuf.append(tmp.get(selectKeyArray[k]-1)+";");
					}
					strBuf.append("'/>");
				}
				strBuf.append("</td>");
			}
			for(int j=0;j<tmp.size();j++)
			{			
				strBuf.append("<td>"+tmp.get(j)+"</td>");
			}
			strBuf.append("</tr>");
			
		}
		
		strBuf.append("</table>");
		
		strBuf.append("<br>");
		
		
		if(pageIndex>0)
		{
			strBuf.append("|<a href='"+pageUrlReal+"pageSize="+String.valueOf(pageSize)+"&pageIndex=0' onClick=\"commonSubmit("+this.formName+",this.href);return false;\">");
			strBuf.append("<font color='red'>首页</font>");
			strBuf.append("</a>|");
			strBuf.append("<a href='"+pageUrlReal+"pageSize="+String.valueOf(pageSize)+"&pageIndex="+String.valueOf(pageIndex-1)+"'  onClick=\"commonSubmit("+this.formName+",this.href);return false;\">");
			strBuf.append("<font color='red'>上一页</font>");
			strBuf.append("</a>|");
			
		}
		if(pageIndex<totalPage-1)
		{
			
			strBuf.append("<a href='"+pageUrlReal+"pageSize="+String.valueOf(pageSize)+"&pageIndex="+String.valueOf(pageIndex+1)+"'  onClick=\"commonSubmit("+this.formName+",this.href);return false;\">");
			strBuf.append("<font color='red'>下一页</font>");
			strBuf.append("</a>|");
			strBuf.append("<a href='"+pageUrlReal+"pageSize="+String.valueOf(pageSize)+"&pageIndex="+String.valueOf(totalPage-1)+"'  onClick=\"commonSubmit("+this.formName+",this.href);return false;\">");
			strBuf.append("<font color='red'>末页</font>");
			strBuf.append("</a>|");
		}
				
		strBuf.append("<font color='red'>每页显示</font>"); 
		strBuf.append("<input type=text name=pageSizeText size=10 value="+pageSize+">");
		strBuf.append("</input>");
		strBuf.append("<font color='red'>行</font>");
		
		//js脚本
		strBuf.append("\n");
		strBuf.append("<script language='JavaScript'>\n");
		  //提交翻页操作脚本
		strBuf.append("function commonSubmit(formObject,url)"+"\n");
		strBuf.append("{\n");
		strBuf.append("formObject.action=url"+"\n");
		//strBuf.append("alert(formObject.action)\n");
		strBuf.append("formObject.submit();"+"\n");
		strBuf.append("}"+"\n");
		
		//如果选择类型为checkbox,增加全选的脚本
		if(this.getSelectType() == OperateConst.SELECT_TYPE_CHECKBOX)
		{
		    //行选择脚本(用于checkBox)
			strBuf.append("function doSelectAll()"+"\n");
			strBuf.append("{"+"\n");
			strBuf.append("var ItemName = '"+this.selectItemName+"'"+"\n");
			strBuf.append("var ItemObj ;\n");
			strBuf.append("var i ;\n");
			strBuf.append("for(i=0;i<"+this.formName+".length;i++)\n");
			strBuf.append("{\n");
			strBuf.append("if("+this.formName+".elements[i].name == '"+this.selectItemName+"')\n");
			strBuf.append("{\n");
			strBuf.append("ItemObj = "+this.formName+".elements[i];\n");
			strBuf.append("if("+this.formName+".checkAll.checked == true)\n");
			strBuf.append("{\n");
			strBuf.append("ItemObj.checked = true;\n");
			strBuf.append("}\n");
			strBuf.append("else\n");
			strBuf.append("{\n");
			strBuf.append("ItemObj.checked = false;\n");
			strBuf.append("}\n");   
			strBuf.append("}\n");
			strBuf.append("}\n");
			strBuf.append("}\n");
		}
		strBuf.append("</script>\n");
		if(this.formName.equals(""))
		{	
			strBuf.append("</form>");
		}
		return strBuf.toString();
	}
	
	/**
	 * @param pm_iPageSize  页大小
	 * @param pm_iPageIndex 页码
	 * @param pm_sPageUrl   jsp页面路径
	 * @param pm_sSql       查询的sql
	 * @param request       SevletRequest
	 * @param response      SevletResponse
	 * @return 数据库分页后的Table HTML(带分页按钮)
	 * @throws OperateException 
	 */
	public String getContentHtml(int pm_iPageSize, int pm_iPageIndex, String pm_sSql, HttpServletRequest request, HttpServletResponse response) throws OperateException {
		//检查必要设置
		if(this.con == null)
		{
			throw new OperateException(OperateConst.EXCEPTION_TYPE_CON_IS_NULL);
		}
		this.contentTitle = new String[100];
		PageDbBean dbBean = new PageDbBean(con);
		Vector result = dbBean.getResultBySql(pm_sSql,this.contentTitle);
		this.setDataVector(result);
		return getContentHtml(pm_iPageSize,pm_iPageIndex,request,response);
	} 
				
	
	
	/**
	 * @param pm_iPageSize  页大小
	 * @param pm_iPageIndex 页码
	 * @param pm_sPageUrl   jsp页面路径
	 * @param pm_sSql       查询的sql
	 * @param pm_sDBType    数据库类型,如数据库直接支持数据库端分页,可提高效率
	 * @param request       ServletRequest
	 * @param response      ServletResponse
	 * @return 数据库分页后的Table HTML(带分页按钮)
	 * @throws OperateException 
	 */
	public String getContentHtml(int pm_iPageSize, int pm_iPageIndex, String pm_sSql, String pm_sDBType, HttpServletRequest request, HttpServletResponse response) throws OperateException {
		//判断数据库类型,如支持数据库端分页,重新组装sql
		String sql = pm_sSql;
		if(pm_sDBType.equals(OperateConst.DBTYPE_ORACLE))/*支持数据库端分页*/
		{
			
            //检查必要设置
			if(this.con == null)

⌨️ 快捷键说明

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