posts - 4,comments - 30,trackbacks - 0

          使用指南
          1:該組件為jsp頁面數據分頁通用組件,可用于所有struts或jsp+javabean的頁面分頁功能

          2:該組件使用非常簡單,只需設定好各項屬性,傳入數據Vctor或者Sql語句,直接調用多態的
          getContentHtml方法即可得到分好頁的表格的html代碼(string),在頁面中<%=string%>即可
          ,之后的各種翻頁操作業已封裝在該html代碼中,用戶不必再操心。
          ??
          3:該組件設置步驟
          ?? a.初始化分頁組件實例
          ???? eg:OperatePage operatePage = new OperatePage();
          ????
          ?? b.設定分頁表格數據所屬的表單名
          ???? 如不設置該屬性,組件將自定義一個名為"form1" 的表單名來存放分頁表格。
          ???? eg:operatePage.setFormName("formName");
          ????
          ?? c.設定翻頁操作時的跳轉頁面
          ???? 該屬性必需設置,否則會報錯。組件支持翻頁時跳轉到jsp頁面(一般都是原jsp頁面)
          ???? 或者某一Action(struts架構)中。
          ???? eg:operatePage.setPageUrl("/jsp/managerAction.do");
          ???? eg:operatePage.setPageUrl("/jsp/testPage.jsp");??
          ??????
          ?? d.設定跳轉類型
          ???? 組件支持jsp和Action兩種跳轉類型,兩種類型并無大的區別,只是設成Action時
          ???? 將在翻頁操作時傳遞一個"flag=OperatePage"的參數以便在用戶Action中區分是翻頁
          ???? 操作。
          ???? operatePage.setForwardType(OperateConst.FOWARD_TYPE_ACTION);或者
          ???? operatePage.setForwardType(OperateConst.FOWARD_TYPE_JSP);
          ????
          ?? e.設定數據Vctor(如果傳sql的話在此步驟設置數據庫連接的Connection)
          ???? operatePage.setCon(con);? 或者
          ???? operatePage.setDataVector(vecData);
          ????
          ?? f.設定是否需要單選或者多選列(可不設置,默認為true)
          ???? opeatePage.operatePage.setHasSelectItem(true);
          ????
          ?? g.設定單選或者多選列類型,元素名及對應的該行數據的主鍵值(如f步驟中設置為false這步省略)
          ????? //支持checkBox和radioButton兩種
          ???? operatePage.setSelectType(OperateConst.SELECT_TYPE_RADIOBUTTON);
          ????? //可不設,默認為selectItem1
          ???? operatePage.setSelectItemName("selectItemName2");
          ????? //序號從1開始,可不設,默認為該行數據的第一列的值
          ???? operatePage.setSelectKeyArray( new int []{1,2,3});
          ???????
          ?? h.設定數據標題列(如e步驟中設置為傳sql此步省略)
          ???? operatePage.setContentTitle(new String[]{"col1","col2","col3","col4"});
          ????
          ?? g.前面的設置完成后,直接調以下API即可
          ?? /**
          ?? * @傳Vector方式
          ? * @param pm_iPageSize? 頁大小
          ? * @param pm_iPageIndex 頁碼
          ? * @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;
          ?
          ? /**
          ?? * @傳sql方式
          ? * @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;
          ??
          ? /**
          ?? * @傳sql方式
          ? * @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;
          ??
          ?
          4:實例
          ?? 上述可能有點抽象,讓我們來看兩個完整使用實例:
          ??
          ?? 第一種是直接在jsp頁面中分頁,即翻頁操作時跳回原jsp頁面中
          ?? 我們來看看testPage.jsp的源代碼:
          <%@ page language="java" contentType="text/html; charset=GB18030"??? pageEncoding="GB18030"%>?
          <jsp:useBean id="operatePage" class="Action.OperatePage"/>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
          <title></title>
          </head>
          <body>
          <%
          ??
          ?? /**********這是獲取數據vector的代碼***********/
          ?? DbSelect a = new DbSelect();
          ?? Vector? b = a.getManagerContentByMain_Key(1);
          ?
          ??
          ? /*form2是你的jsp頁面中的表單名*/
          ? operatePage.setFormName("form2");??????
          ? operatePage.setPageUrl("/jsp/testPage.jsp");
          ? operatePage.setForwardType(OperateConst.FOWARD_TYPE_JSP);
          ? operatePage.setDataVector(b);
          ? operatePage.setHasSelectItem(true);
          ? operatePage.setSelectType(OperateConst.SELECT_TYPE_CHECKBOX);
          ?
          ? /*selectItemName是單選列的元素名,這樣你可以用request.getParamer("selectItemName")來獲取選中的值 ,如不設,默認為名字為selectItemName1*/
          ? operatePage.setSelectItemName("selectItemName");
          ?
          ? /*1,2,3表示你用request.getParamer("selectItemName")獲取選中行的value為該行第一列,第二列,第三列的值的集合,各列的值以;分隔*/
          ? operatePage.setSelectKeyArray( new int []{1,2,3});
          ?
          ? operatePage.setContentTitle(new String[]{"col1","col2","col3","col4"});
          ?
          ? /****15是初始的頁大小,0是初始頁碼,之后翻頁跳轉時這兩個值會被request中的新值自動更新*/
          ? String c = operatePage.getContentHtml(15,0,request,response);
          ?
          %>
          <%=c %>

          </script>
          </body>
          </html>
          這是傳Vctor方式,如果我們改成傳sql的方式,只需做修改如下:

          <%
          ? /**********這是獲取數據庫連接的代碼***********/
          ? DbConnect a = new DbConnect();
          ? Connection con = a.getOracleConnection();
          ? String sql = "select * from safe_control_object";
          ?
          ?
          ? operatePage.setFormName("form2");
          ? operatePage.setPageUrl("/jsp/testPage.jsp");
          ? operatePage.setForwardType(OperateConst.FOWARD_TYPE_JSP);
          ? operatePage.setCon(con);
          ?
          ? operatePage.setHasSelectItem(true);
          ? operatePage.setSelectType(OperateConst.SELECT_TYPE_CHECKBOX);
          ? operatePage.setSelectItemName("selectItemName2");
          ? operatePage.setSelectKeyArray( new int []{1,2,3});
          ?
          ? /* OperateConst.DBTYPE_ORACLE是數據庫類型,該字段可傳可不傳,傳的好處在于如果該類型數據庫支持后端分頁,則組件會采用后端分頁的方式,效率較前端分頁要高*/
          ? String c = operatePage.getContentHtml(15,0,sql,OperateConst.DBTYPE_ORACLE,request,response);
          %>

          我們再來看看跳轉到Action中的情況,這是翻頁Action的源碼示例
          ??
          ?? public class ManagerAction extends DispatchAction{
          ??? OperatePage operatePage = new OperatePage();
          ??? /**********這是獲取數據vector的代碼***********/
          ??? DbSelect a = new DbSelect();
          ?? Vector? b = a.getManagerContentByMain_Key(1);
          ??
          ??
          ?? public ActionForward pageOperate(ActionMapping mapping, ActionForm form,
          ??????????? HttpServletRequest request, HttpServletResponse response)
          ??? throws Exception
          ??? {
          ??? ?String c = operatePage.getContentHtml(15,0,request,response);
          ??? ?HttpSession session = request.getSession();
          ??? ?session.setAttribute("testPage",c);
          ????? return mapping.findForward("testPage");
          ??? }
          ???
          ??? /**初始化的操作**/
          ??? public ActionForward initPageOperate(ActionMapping mapping, ActionForm form,
          ??????????? HttpServletRequest request, HttpServletResponse response)
          ??? throws Exception
          ??? {
          ??? ?
          ??? ?operatePage.setFormName("form2");
          ??? ?operatePage.setPageUrl("/jsp/managerAction.do");
          ??? ?operatePage.setForwardType(OperateConst.FOWARD_TYPE_ACTION);
          ??? ?operatePage.setDataVector(b);
          ??? ?operatePage.setHasSelectItem(true);
          ??? ?operatePage.setSelectType(OperateConst.SELECT_TYPE_RADIOBUTTON);
          ??? ?operatePage.setSelectItemName("selectItemName2");
          ??? ?operatePage.setSelectKeyArray( new int []{1,2,3});
          ??? ?operatePage.setContentTitle(new String[]{"col1","col2","col3","col4"});
          ??? ?
          ??? ?String c = operatePage.getContentHtml(15,0,request,response);
          ??? ?/*把獲得的分頁后的html代碼放到session中去*/
          ??? ?HttpSession session = request.getSession();
          ??? ?session.setAttribute("testPage",c);
          ??? ?/*testPage是你在struts-config.xml中配置的jsp頁面的跳轉forward**/
          ????? return mapping.findForward("testPage");
          ??? }
          ???
          }
          jps示例頁面如下:
          <%@ page language="java" contentType="text/html; charset=GB18030"??? pageEncoding="GB18030"%>?
          <jsp:useBean id="operatePage" class="Action.OperatePage"/>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
          <title></title>
          </head>
          <body>
          <%
          String c = (String)session.getAttribute("testPage");

          %>
          <%=c %>
          //flag=initPageOperate對應Action中初始化的操作
          <a href="/jsp/managerAction.do?flag=initPageOperate">測試Action端分頁</a>

          這是傳Vctor的方式,傳sql和之前跳轉到jsp中的類似,這里就不重復了

          OK!這就是最常見的傳sql和傳Vector,及在原jsp頁面跳轉或者在Action中跳轉的數據庫分頁組件操作,每種不過十幾行代碼即可搞定!


          5:如果有什么不清楚的地方,請發email:qingyuan18@126.com,或者msn:tangqingyuan@chinamobilesz.com,
          有做的不好的地方,請不吝賜教!

          ?

          IOperatePage.java?? 文件

          package Action;

          import java.sql.Connection;
          import java.util.ArrayList;
          import java.util.Vector;

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

          public interface IOperatePage {

          ?/**
          ? * @param pm_iPageSize? 頁大小
          ? * @param pm_iPageIndex 頁碼
          ? * @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;
          ?
          ?/**
          ? * @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;
          ?
          ?/**
          ? * @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;
          ?
          }

          OperateConst.java 文件 ??????????????????

          package Action;

          public final class OperateConst {
          ?/*
          ? * 數據庫類型
          ? */
          ?public static final String DBTYPE_SQLSERVER = "sqlServer";
          ?public static final String DBTYPE_DB2 = "DB2";
          ?public static final String DBTYPE_ORACLE = "oracle";

          ?/*
          ? * 行數據選擇類型
          ? * 1:CheckBox
          ? * 2:RadioButton
          ? */
          ?public static final int SELECT_TYPE_CHECKBOX = 1;
          ?public static final int SELECT_TYPE_RADIOBUTTON = 2;
          ?
          ?/*
          ? * 翻頁跳轉類型
          ? * 1:跳回原jsp頁面
          ? * 2:跳回Action.do(struts框架)
          ? */
          ?public static final int FOWARD_TYPE_JSP = 1;
          ?public static final int FOWARD_TYPE_ACTION =2;
          ?
          ?/*
          ? *錯誤類型
          ? *1:未設置url
          ? *2:未設置標題
          ? *3:Connection為空(傳sql方式)
          ? *4:未識別的數據庫
          ? *5:數據vector為空(非傳sql方式)
          ? *6:查詢sql為空(傳sql方式)
          ? */
          ?public static final int EXCEPTION_TYPE_URL_IS_NULL = 1;
          ?public static final int EXCEPTION_TYPE_TITLE_IS_NULL = 2;
          ?public static final int EXCEPTION_TYPE_CON_IS_NULL = 3;
          ?public static final int EXCEPTION_TYPE_DB_NOT_RECOGNIZE = 4;
          ?public static final int EXCEPTION_TYPE_DATA_VECTOR_IS_NULL = 5;
          ?public static final int EXCEPTION_TYPE_SQL_IS_NULL = 6;
          }




          OperateException.java 文件?????



          package Action;

          public class OperateException extends Exception {
          ?private String ExceptionMsg= "OperatePage Exception:";
          ?/**
          ? * @param pm_iExceptionType 異常類型
          ? * 根據定義的異常類型構造異常信息
          ? */
          ?public OperateException(int pm_iExceptionType)
          ?{
          ??if(pm_iExceptionType == OperateConst.EXCEPTION_TYPE_CON_IS_NULL)
          ??{
          ???this.ExceptionMsg += "The Connection is null ! ";
          ??}
          ??else if(pm_iExceptionType == OperateConst.EXCEPTION_TYPE_DB_NOT_RECOGNIZE)
          ??{
          ???this.ExceptionMsg += "unrecoginze DBType!";
          ??}
          ??else if(pm_iExceptionType == OperateConst.EXCEPTION_TYPE_TITLE_IS_NULL)
          ??{
          ???this.ExceptionMsg += "The title is null";
          ??}
          ??else if(pm_iExceptionType == OperateConst.EXCEPTION_TYPE_URL_IS_NULL)
          ??{
          ???this.ExceptionMsg += "The pageUrl is null!";
          ??}
          ??else if(pm_iExceptionType == OperateConst.EXCEPTION_TYPE_DATA_VECTOR_IS_NULL)
          ??{
          ???this.ExceptionMsg += "The Data Vector is null!";
          ??}
          ??
          ??
          ?}
          ?
          ?/**
          ? * 打印異常信息
          ? */
          ?public void printMsg()
          ?{
          ??System.out.println(this.ExceptionMsg);
          ??
          ?}

          }




          OperatePage.java? 文件??????



          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)
          ???{
          ????throw new OperateException(OperateConst.EXCEPTION_TYPE_CON_IS_NULL);
          ???}
          ???//檢查必要設置
          ???if(this.pageUrl == null)?? /*如傳遞的跳轉頁面為空,拋出異常*/
          ???{
          ????throw new OperateException(OperateConst.EXCEPTION_TYPE_URL_IS_NULL);
          ???}
          ???
          ???//主體操作
          ???StringBuffer strBuf = new StringBuffer("");
          ???int pageSize=pm_iPageSize,pageIndex=pm_iPageIndex;
          ???// 判斷是第一次進入還是翻頁操作,設置相應的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)
          ???{
          ????this.pageUrl = this.pageUrl+"?flag=pageOperate&";
          ???}
          ???else if(this.forwardType == OperateConst.FOWARD_TYPE_JSP)
          ???{
          ????this.pageUrl = this.pageUrl+"?";
          ???}
          ???
          ???int pageBegin = pageSize*pageIndex;
          ???int pageEnd = pageSize*(pageIndex+1)-1;
          ???String pageUrlReal = this.pageUrl;
          ???int pageTotal = 0;
          ???sql = "select * from (select rownum r, t. *? from ("+pm_sSql +") t where rownum <="+(pageEnd+1)+") t_out where r >="+(pageBegin+1);
          ??????
          ???
          ???//獲取總頁數
          ???PageDbBean dbBean = new PageDbBean(this.con);
          ???
          ???int rowTotal = dbBean.getTotalCount(pm_sSql);
          ???pageTotal = rowTotal/pm_iPageSize;
          ???if(pageTotal*pm_iPageSize<rowTotal)
          ???{
          ????pageTotal = pageTotal + 1;
          ???}
          ???
          ???
          ???//如未設置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");
          ???}
          ???
          ???//主體操作
          ???this.contentTitle = new String[100];
          ???Vector result = dbBean.getResultBySql2(sql,this.contentTitle);
          ???Vector vecContent = result;
          ???strBuf.append("<table width=100% cellspacing=1 cellpadding=0>");
          ???//表格標題欄
          ???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>");
          ???
          ???for(int i=0;i<vecContent.size();i++)
          ???{
          ????Vector tmp = (Vector)vecContent.get(i);
          ????strBuf.append("<tr>");
          ????if(this.hasSelectItem)
          ????{
          ?????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<pageTotal-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(pageTotal-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.getFormName().equals(""))
          ???{?
          ????strBuf.append("</form>");
          ???}
          ???return strBuf.toString();
          ???
          ???
          ???
          ??}
          ??else?? /*不支持數據庫端分頁*/
          ??{
          ???return getContentHtml(pm_iPageSize,pm_iPageIndex,pm_sSql,request,response);
          ??}
          ??
          ??
          ??
          ??
          ?}
          ?
          ?
          ?//屬性get/set方法
          ?public String getFormName() {
          ??return formName;
          ?}
          ?
          ?
          ?public void setFormName(String formName) {
          ??this.formName = formName;
          ?}


          ?public String[] getContentTitle() {
          ??return contentTitle;
          ?}


          ?public void setContentTitle(String[] contentTitle) {
          ??this.contentTitle = contentTitle;
          ?}


          ?public String getSelectItemName() {
          ??return selectItemName;
          ?}


          ?public void setSelectItemName(String selectItemName) {
          ??this.selectItemName = selectItemName;
          ?}


          ?public int[] getSelectKeyArray() {
          ??return selectKeyArray;
          ?}


          ?public void setSelectKeyArray(int[] selectKeyArray) {
          ??this.selectKeyArray = selectKeyArray;
          ?}


          ?public int getSelectType() {
          ??return selectType;
          ?}


          ?public void setSelectType(int selectType) {
          ??this.selectType = selectType;
          ?}


          ?public boolean hasSelectItem() {
          ??return hasSelectItem;
          ?}


          ?public void setHasSelectItem(boolean hasSelectItem) {
          ??this.hasSelectItem = hasSelectItem;
          ?}
          ?
          ?
          ?public int getForwardType() {
          ??return forwardType;
          ?}


          ?public void setForwardType(int forwardType) {
          ??this.forwardType = forwardType;
          ?}

          ?public String getPageUrl() {
          ??return pageUrl;
          ?}

          ?public void setPageUrl(String pageUrl) {
          ??this.pageUrl = pageUrl;
          ?}

          ?public void setSelfForm(boolean isSelfForm) {
          ??this.isSelfForm = isSelfForm;
          ?}

          ?public void setDataVector(Vector dataVector) {
          ??this.dataVector = dataVector;
          ?}

          ?public void setCon(Connection con) {
          ??this.con = con;
          ?}
          ?
          ?
          }




          PageDbBean.java 文件



          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.Vector;

          public class PageDbBean {
          ?private Connection con;
          ?private Statement stmt;
          ?private ResultSet rs;
          ?
          ?public PageDbBean(Connection pm_objCon)
          ?{
          ??con = pm_objCon;
          ?}
          ?
          ?/**
          ? * @param pm_sSql sql語句
          ? * @param pm_sTitle 設置標題
          ? * @return 結果集
          ? */
          ?public Vector getResultBySql(String pm_sSql,String [] pm_sTitle)
          ?{
          ??try
          ??{
          ???stmt = this.con.createStatement();
          ???rs = stmt.executeQuery(pm_sSql);
          ???Vector result = new Vector();
          ???
          ???ResultSetMetaData meta = rs.getMetaData();
          ???int colNum = meta.getColumnCount();
          ???for(int j=0;j<colNum;j++)
          ???{
          ????pm_sTitle[j] = meta.getColumnName(j+1);
          ???}
          ???while(rs.next())
          ???{
          ????Vector rowVector = new Vector();
          ????for(int i=0;i<colNum;i++)
          ????{
          ?????rowVector.add(rs.getString(i+1));
          ????}
          ????result.add(rowVector);
          ????
          ???}
          ???return result;
          ??}
          ??catch(SQLException es)
          ??{
          ???System.out.println("PageDbBean:SQL操作異常!");
          ???es.printStackTrace();
          ???return null;
          ??}
          ??finally
          ??{
          ???try {
          ????rs.close();
          ????stmt.close();
          ???}
          ???catch (SQLException e)
          ???{
          ????System.out.println("資源回收失敗!");
          ????e.printStackTrace();
          ????
          ???}
          ???
          ??}
          ?}
          ?
          ?/**
          ? * @param pm_sSql sql語句
          ? * @param pm_sTitle 設置標題
          ? * @return 結果集
          ? */
          ?public Vector getResultBySql2(String pm_sSql,String [] pm_sTitle)
          ?{
          ??try
          ??{
          ???stmt = this.con.createStatement();
          ???rs = stmt.executeQuery(pm_sSql);
          ???Vector result = new Vector();
          ???
          ???ResultSetMetaData meta = rs.getMetaData();
          ???int colNum = meta.getColumnCount();
          ???for(int j=1;j<colNum;j++)
          ???{
          ????pm_sTitle[j-1] = meta.getColumnName(j+1);
          ???}
          ???while(rs.next())
          ???{
          ????Vector rowVector = new Vector();
          ????for(int i=1;i<colNum;i++)
          ????{
          ?????rowVector.add(rs.getString(i+1));
          ????}
          ????result.add(rowVector);
          ????
          ???}
          ???return result;
          ??}
          ??catch(SQLException es)
          ??{
          ???System.out.println("PageDbBean:SQL操作異常!");
          ???es.printStackTrace();
          ???return null;
          ??}
          ??finally
          ??{
          ???try {
          ????rs.close();
          ????stmt.close();
          ???}
          ???catch (SQLException e)
          ???{
          ????System.out.println("資源回收失敗!");
          ????e.printStackTrace();
          ????
          ???}
          ???
          ??}
          ?}
          ?/**
          ? * @param pm_sSql
          ? * @return 總記錄數
          ? */
          ?public int getTotalCount(String pm_sSql)
          ?{
          ??try
          ??{
          ???stmt = con.createStatement();
          ???rs = stmt.executeQuery("select count(*) from ("+pm_sSql+")");
          ???rs.next();
          ???int rowTotal = rs.getInt(1);
          ???return rowTotal;
          ??}
          ??catch(SQLException es)
          ??{
          ???System.out.println("PageDbBean:SQL操作異常");
          ???es.printStackTrace();
          ???return -1;
          ??}
          ??finally
          ??{
          ???try
          ???{
          ????this.rs.close();
          ????this.stmt.close();
          ???}
          ???catch(SQLException es2)
          ???{
          ????System.out.println("PageDbBean:資源回收失敗!");
          ????es2.printStackTrace();
          ????
          ???}
          ??}
          ?}

          }

          posted on 2007-08-06 16:21 蠻哥♂楓 閱讀(1296) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 探索| 廊坊市| 浦江县| 大同县| 石屏县| 瓦房店市| 巴马| 陵水| 奇台县| 和平区| 武邑县| 乌审旗| 佛学| 九台市| 黔南| 西畴县| 德庆县| 城步| 云南省| 漯河市| 溧阳市| 石林| 富顺县| 淮安市| 聂拉木县| 若尔盖县| 苏尼特右旗| 涞水县| 建始县| 瓮安县| 宜春市| 个旧市| 家居| 涞水县| 顺平县| 原平市| 饶阳县| 图片| 民乐县| 灵石县| 麦盖提县|