在頁面中,當檢索的數據很多時,通常需要分頁顯示數據,并要實現翻頁。 下面將通過一些例程來說明實現JSP頁面翻頁技術的實現。 首先,在JSP中,通過JAVA servlet 來檢索數據,而用JSP來調用結果來顯示。 因而,此技術可分為兩個部分(依賴關系): 1. 在服務器端的servlet 中的實現 要點: &將查詢條件保存到session中,取session中的查詢條件 &設置Statement對象的MaxRows(確定一頁顯示多少行數據) &順序地通過執行SQL語句查詢數據,按maxRows 來檢索一個maxRows的數據, 下一頁再檢索下一maxRows的數據,以此類推。 2. 在JSP中的顯示實現 要點: &顯示maxRows條數據 &通過“下一頁”按鈕或超鏈再次調用剛才的servlet查詢下一maxRows的數據 流程如圖所示:
下面通過一個例程來說明(一個servlet程序和一個JSP程序): l querymedicine java (藥 querymedicine ) 包裹藥; 導入 javax.servlet.*; 導入 javax.servlet.http.*; 導入 java.io.*; 導入 java.util.*; 導入 java.sql.*; 導入 Medicine.medicinelist; 導入 Medicine.searchData; //////////////////////////////////////////////////// // 接---mutiquery.jsp頁面,并從request中得到5條查詢條件 /// // 按條件查詢藥品,并將結果存進session的“medicinelist”中。 /// // 張乾 2000年3月15日 /// //////////////////////////////////////////////////// 公共的班 querymedicine 擴大 HttpServlet { 私人的 DBConnectionManager connMgr; //初始化全球的變量 公共的空的 init ( ServletConfig 設置)扔 ServletException { super.init(config); connMgr = DBConnectionManager.getInstance(); } //========================處理 HTTP Get 請求============================ 公共的空的 doGet ( HttpServletRequest請求 , HttpServletResponse反應) 陳述 stmt=null; 連接反對= connMgr.getConnection("medicine"); 如果(空的反對==){ response.sendRedirect("/medicine/con_error.html"); 歸還; } // ==================== 創建數據庫Statement ============================= 試一試{ stmt=con.createStatement(); } 抓住(例外 e ) { connMgr.freeConnection("medicine",con); response.sendRedirect("/medicine/stmt_error.html"); 歸還; } //------------------------------------------------------------- long all_count=0;//存滿足條件的藥品總數 //===================從request中得到session====================== 試一試{ HttpSession會議= request.getSession(false); 如果(空的會議==){ connMgr.freeConnection("medicine",con); response.sendRedirect("/medicine/session_error.html"); 歸還; } //----------------------------------------------------------- //======從“下一頁”提交來的參數取得前頁最后一條數據的藥品編碼======= 串 ll_pos=request.getParameter("pos"); //---------------------------------------------------------- //=====================查詢用的SQL語句串========================== 繩sqlstatment=& quot ;選擇 medicines.ypbm, medsmalltypes.zlmc, medsupertypes.clmc, //----------------------------------------------------- 繩 zlbm; 繩 dlbm; 繩 clbm; 繩 zyyx; 繩 ypm; searchData slist=新建 searchData (); 同步(會議){ slist=(searchData)session.getAttribute("searchList"); } if(ll_pos.equals("-1")){ //===表示不是由“下一頁”過來要從頭開始查數據========== 如果( slist ! =null ){ 同步(會議){ session.removeAttribute("searchList"); } } slist=新建 searchData (); //=============從設置查詢條件頁面取得查詢條件的參數=================== zlbm=request.getParameter("zlbm"); dlbm=request.getParameter("dlbm"); clbm=request.getParameter("clbm"); zyyx=request.getParameter("zyyx"); ypm=request.getParameter("ypm"); //------------------------------------------------------ //=================將查詢條件參數通過Vector存到session中========== slist.setZlbm ( zlbm ); slist.setDlbm ( dlbm ); slist.setClbm ( clbm ); slist.setZyyx ( zyyx ); slist.setYpm ( ypm ); 同步(會議){ session.setAttribute (& quot ; searchList & quot ;, slist ); } //--------------------------------------------------------- } //-------------------------------------------------------- 另外 { //============================取出查詢條件參數==================== 如果( slist ! =null ){ zlbm=slist.getZlbm(); dlbm=slist.getDlbm(); clbm=slist.getClbm(); zyyx=slist.getZyyx(); ypm=slist.getYpm(); } 另外{ 如果( stmt ! =null ) stmt.close(); stmt.setMaxRows(0); connMgr.freeConnection("medicine",con); response.sendRedirect("/medicine/session_error.html"); 歸還; } //------------------------------------------------- } 繩sql2=& quot ;選擇數(*)來自藥在哪兒del_flag=0& quot ;; //=====================根據條件參數設置SQL語句======================= if(!(zlbm.trim().equals("0"))) { sqlstatment+=(& quot ;并且( medicines.zlbm=''"+zlbm.trim()+"'' )& quot ;); sql2+=(& quot ;和 zlbm=''"+zlbm.trim()+"''"); } if(!(dlbm.trim().equals("0"))) { sqlstatment+=(& quot ;并且( medicines.dlbm=''"+dlbm.trim()+"'' )& quot ;); sql2+=(& quot ;和 dlbm=''"+dlbm.trim()+"''"); } if(!(clbm.trim().equals("0"))) { sqlstatment+=(& quot ;并且( medicines.clbm=''"+clbm.trim()+"'' )& quot ;); sql2+=(& quot ;和 clbm=''"+clbm.trim()+"''"); } if(!(zyyx.trim().length ()==0)){ sqlstatment+=(& quot ;并且(象 ''%"+zyyx.trim()+"%''一樣的 medicines.zyyx )& quot ;); sql2+=(象 ''%"+zyyx.trim()+"%''");一樣的& quot ;和 zyyx } if(!(ypm.trim().length ()==0)){ sqlstatment+=(& quot ;并且(象 ''%"+ypm.trim()+"%''一樣的 medicines.ypm )& quot ;); sql2+=(象 ''%"+ypm.trim()+"%''");一樣的& quot ;和 ypm } sqlstatment+=& quot ;))由 medicines.ypbm ASC & quot ;;的命令 //------------------------------------------------------------- 矢量列表 =新建矢量(); //================= 設置一頁顯示的數據條數(一次檢索出的數據條數)=========== stmt.setMaxRows(25); //---------------------------------------------------------------------- //===================執行查詢將結果放到ResultSet中================ ResultSet rs = stmt.executeQuery(sqlstatment); ResultSet rs2= stmt.executeQuery(sql2); //------------------------------------------------ if(rs==null){ //如果沒有查詢結果數據 如果( stmt ! =null ) stmt.close(); stmt.setMaxRows(0); connMgr.freeConnection("medicine",con); response.sendRedirect("/medicine/no_medicine.html");//定向到一個頁面 歸還; } //====================將藥品信息填入數據對象并存入Vector中================ if(rs2.next()){ all_count=rs2.getLong(1);//取得總條數 } if(rs2!=null)rs2.close(); while(rs.next()){ medicinelist m =新建 medicinelist (); m.setYpbm(rs.getInt("ypbm")); m.setZlmc(rs.getString("zlmc")); m.setClmc(rs.getString("clmc")); m.setDlmc(rs.getString("dlmc")); m.setYpm(rs.getString("ypm")); m.setZyyx(rs.getString("zyyx")); m.setYpzy(rs.getString("ypzy")); m.setClbm(clbm); m.setDlbm(dlbm); m.setZlbm(zlbm); list.addElement(m); } //---------------------------------------------------------- if(rs!=null)rs.close(); stmt.setMaxRows(0); if(stmt!=null)stmt.close(); connMgr.freeConnection("medicine",con); //========================存入session中=========================== 同步(會議){ session.setAttribute("medicinelist",list); } //----------------------------------------------- }抓住( SQLException e ){ connMgr.freeConnection("medicine",con); response.sendRedirect("/Medicine/sql_error.html"); 歸還;} //=======================重定向到一個JSP頁面========================== 串 url="/medicine/querymedicine.jsp?all_count="+all_count; ServletContext sc = getServletContext (); RequestDispatcher rd = sc.getRequestDispatcher(url); rd.forward(request,反應); //------------------------------------------------------- } 公共的空破壞(){ // =================== 在Servlet退出時終止數據庫連接,取消Statement對象 如果( connMgr ! =null ) connMgr.release(); //------------------------------------------------------------------------ } //========================處理HTTP Post 請求 ============================ 公共的空的 doPost ( HttpServletRequest請求 , HttpServletResponse反應) doGet (請求 ,反應); } //==========================取得 Servlet 信息 ============================ 公共的繩 getServletInfo (){ 回來 "medicine.querymedicine信息& quot ;; } } l querymedicine.jsp <%@頁面語言=& quot ; java & quot ;session=& quot ;真實的& quot ; import="java.util.*, <手跡語言=& quot ; JavaScript & quot ;> 功能下一條 (){ var ls_pos=document.form2.maxpos.value; document.location="/servlet/Medicine.querymedicine?pos="+ls_pos; } 功能詳細( ypbm ){ document.location="/servlet/Medicine.Detail?ypbm="+ypbm; } </script> <!--添加頭--> <div align="中心"> <body topmargin="0"leftmargin="10"rightmargin="10” bgcolor="#FFFFFF"> <中心>< IFRAME寬度=760高度=130 NORESIZE SCROLLING=否 FRAMEBORDER=0 </div> <!--完成 --> <title>商品列表</title> <% 方法 md =新建方法(); 矢量 sklist; 同步(會議){ sklist =(矢量) session.getAttribute("medicinelist"); } %> <!----------------------------- 顯示表頭 --------------------------------> <% 如果( sklist ==空的或 sklist.size() <=0) { response.sendRedirect("/medicine/no_medicine.html"); 歸還; } 另外 {%> <center>您好!以下是商品的列表,共有<font color=#ff0000> </center> <div align="中心"> <中心> <桌子邊界=& quot ;1& quot ;cellpadding=& quot ;0& quot ;cellspacing=& quot ;0& quot ;寬度=& quot ;840& quot ; <tr bgcolor="#339933"> <td width=42 align="center"><font color="#339933"><b>明細</b></font></td> <td width=160 align="center"><font color="#FFFFFF"><b>商品名稱</b></font></td> <td width=52 align="center"><font color="#FFFFFF"><b>超類</b></font></td> <td width=145 align="center"><font color="#FFFFFF"><b>大類</b></font></td> <td width=145 align="center"><font color="#FFFFFF"><b>子類</b></font></td> <td width=270 align="center"><font color="#FFFFFF"><b>描述</b></font></td> </tr> <!-------------------------------------------------------------------------------------------------------------------> <% medicinelist d=新建 medicinelist (); 適合于 ( int索引=0;索引 < sklist.size();index++) { d = (medicinelist)sklist.elementAt(index); 繩 lshref; 如果 (d.getYpzy()==null或 d.getYpzy().equals("http://")或 d.getYpzy().equals("")) { lshref=""; }另外{ lshref=& quot ;<一 href="+d.getYpzy()+">"; } out.println("<form命名=表格1 method=post action=/servlet/Medicine.Detail?ypbm="+d.getYpbm()+">"); out.println("<tr bgcolor=#F3F3E9>< td align=center ><字體 color=#000000大小=2> out.println(lshref+d.getYpm()+"</a></font></td><td align=center ><字體 color=#000000大小=2>& quot ;); out.println(d.getClmc()+"</font></td><td align=center ><字體 color=#000000大小=2>& quot ; out.println(d.getZlmc()+"</font></td><td align=center ><字體 color=#000000大小=2>& quot ; out.flush(); } %> <表格命名=表格2id=表格2> <輸入類型=hidden命名=maxpos id=maxpos value=<%=d.getYpbm()%>> < /表格 > <% } %> </table> <p></p> <% 串 ssll=request.getParameter("all_count"); 長的長的 temp=新建 ( ssll ); 長cou= temp.longValue(); if(sklist.size()==25&&cou>25) {%> <input type=button value="下頁"onclick="next(1);"> <%}%> <% 同步(會議){ if(session.getAttribute("medicinelist")!=null){ session.removeValue("medicinelist"); } } %> </center> <p align="center"><input type="button"value="返回"name="B3"onclick="history.back()"> <br><br><br> <!--添加底部 --> <div align="中心"> <中心>< IFRAME寬度=760高度=140 NORESIZE SCROLLING=否 FRAMEBORDER=0 </div> <!--完成 --> |
溫馨提示:喜歡本站的話,請收藏一下本站!