在JSP頁面中實現檢索數據的分頁顯示


在頁面中,當檢索的數據很多時,通常需要分頁顯示數據,並要實現翻頁。

下面將通過一些例程來說明實現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反應)
扔 ServletException , IOException {

陳述 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");
//如果pos=-1則表示要從頭開始查

//----------------------------------------------------------

//=====================查詢用的SQL語句串==========================

繩sqlstatment=& quot ;選擇 medicines.ypbm, medsmalltypes.zlmc, medsupertypes.clmc,
medtypes.dlmc, medicines.ypm, medicines.zyyx, medicines.ypzy來自葯,
medsmalltypes , medsupertypes , medtypes在哪兒 medicines.ypbm>"+ll_pos+"
並且(( medsmalltypes.zlbm = medicines.zlbm )並且( medsupertypes.clbm = medicines.clbm )
並且( medtypes.dlbm = medicines.dlbm )並且(( medicines.del_flag =0)& quot ;;

//-----------------------------------------------------

繩 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反應)
扔 ServletException , IOException {

doGet (請求 ,反應);

}

//==========================取得 Servlet 信息 ============================

公共的繩 getServletInfo (){

回來 "medicine.querymedicine信息& quot ;;

}

}

l querymedicine.jsp

<%@頁面語言=& quot ; java & quot ;session=& quot ;真實的& quot ; import="java.util.*,
Medicine.method, Medicine.medicinelist"contentType="text/html;charset=gbk" %>

<手跡語言=& 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">
<div align="中心">

<中心>< IFRAME寬度=760高度=130 NORESIZE SCROLLING=否 FRAMEBORDER=0
MARGINHEIGHT=0MARGINWIDTH=0SRC=& quot ; ..\medicinetitle.html"></iframe>

</div>

<!--完成 -->

<title>商品列表</title>

<%

方法 md =新建方法();

矢量 sklist;

同步(會議){

sklist =(矢量) session.getAttribute("medicinelist");

}

%>

<!----------------------------- 顯示表頭 -------------------------------->

<%

如果( sklist ==空的或 sklist.size() <=0)

{

response.sendRedirect("/medicine/no_medicine.html");

歸還;

}

另外

{%>

<center>您好!以下是商品的列表,共有<font color=#ff0000>
<%=request.getParameter("all_count")%></font>條符合條件的葯品信息

</center>

<div align="中心">

<中心>

<桌子邊界=& quot ;1& quot ;cellpadding=& quot ;0& quot ;cellspacing=& quot ;0& quot ;寬度=& quot ;840& quot ;
bordercolorlight="#FFFFFF"bordercolordark="#000000">

<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>
<input type=submit name=submit1 value=明細></font></td><td align=center><font color=#000000 size=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 ;
+d.getDlmc()+"</font></td><td align=center ><字體 color=#000000大小=2>& quot ;);

out.println(d.getZlmc()+"</font></td><td align=center ><字體 color=#000000大小=2>& quot ;
+md.notNull(d.getZyyx())+"</font></td></tr></form>");

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
MARGINHEIGHT=0MARGINWIDTH=0SRC=& quot ; ..\bottom.html"></iframe>

</div>

該文章轉載自網絡大本營:http://www.xrss.cn/Dev/JAVA/20065302071.Html


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com