<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 蠻哥♂楓 閱讀(1294) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 久久国产精品免费网站| 黄色一级毛片免费| 91九色视频无限观看免费| 亚洲精品tv久久久久久久久| 国产亚洲精品91| 亚洲国产精品xo在线观看| 在线免费观看亚洲| 亚洲综合无码一区二区三区| 中文字幕视频免费| 色噜噜亚洲男人的天堂| 女人张腿给男人桶视频免费版| 国产亚洲综合久久| 浮力影院亚洲国产第一页| 永久免费AV无码网站国产| 中文字幕亚洲综合久久| a级毛片无码免费真人| 美女隐私免费视频看| 国产亚洲AV夜间福利香蕉149| 久久久精品午夜免费不卡| 亚洲春色另类小说| 国产精品免费一级在线观看| 农村寡妇一级毛片免费看视频| 亚洲日韩一页精品发布| ww在线观视频免费观看| 久久精品熟女亚洲av麻豆 | 日本免费人成视频在线观看| 99人中文字幕亚洲区| 免费观看理论片毛片| 无码AV动漫精品一区二区免费| 亚洲高清国产AV拍精品青青草原 | 亚洲国产精品高清久久久| 色老头永久免费网站| 免费在线观看一区| 亚洲AV日韩精品久久久久| 国产男女猛烈无遮挡免费网站| 免费无码黄网站在线看| 亚洲乱色熟女一区二区三区蜜臀| 亚洲人成人无码网www电影首页| 美女网站免费福利视频| 成人免费一区二区三区| 亚洲最大av资源站无码av网址|