在JSP頁(yè)面中完成檢索數(shù)據(jù)的分頁(yè)顯示
發(fā)表時(shí)間:2024-05-21 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在頁(yè)面中,當(dāng)檢索的數(shù)據(jù)很多時(shí),通常需要分頁(yè)顯示數(shù)據(jù),并要實(shí)現(xiàn)翻頁(yè)。 下面將通過(guò)一些例程來(lái)說(shuō)明實(shí)現(xiàn)JSP頁(yè)面翻頁(yè)技術(shù)的實(shí)現(xiàn)。 首先,在JSP中,通過(guò)JAVA servlet 來(lái)檢索數(shù)據(jù),而用JSP來(lái)調(diào)用結(jié)果來(lái)顯示。 因而,此技術(shù)可分為兩個(gè)部分(依賴關(guān)系): 1. 在服務(wù)器端的servlet 中的實(shí)現(xiàn)...
在頁(yè)面中,當(dāng)檢索的數(shù)據(jù)很多時(shí),通常需要分頁(yè)顯示數(shù)據(jù),并要實(shí)現(xiàn)翻頁(yè)。
下面將通過(guò)一些例程來(lái)說(shuō)明實(shí)現(xiàn)JSP頁(yè)面翻頁(yè)技術(shù)的實(shí)現(xiàn)。
首先,在JSP中,通過(guò)JAVA servlet 來(lái)檢索數(shù)據(jù),而用JSP來(lái)調(diào)用結(jié)果來(lái)顯示。
因而,此技術(shù)可分為兩個(gè)部分(依賴關(guān)系):
1. 在服務(wù)器端的servlet 中的實(shí)現(xiàn)
要點(diǎn):
&將查詢條件保存到session中,取session中的查詢條件
&設(shè)置Statement對(duì)象的MaxRows(確定一頁(yè)顯示多少行數(shù)據(jù))
&順序地通過(guò)執(zhí)行SQL語(yǔ)句查詢數(shù)據(jù),按maxRows 來(lái)檢索一個(gè)maxRows的數(shù)據(jù),
下一頁(yè)再檢索下一maxRows的數(shù)據(jù),以此類推。
2. 在JSP中的顯示實(shí)現(xiàn)
要點(diǎn):
&顯示maxRows條數(shù)據(jù)
&通過(guò)“下一頁(yè)”按鈕或超鏈再次調(diào)用剛才的servlet查詢下一maxRows的數(shù)據(jù)
流程如圖所示:
下面通過(guò)一個(gè)例程來(lái)說(shuō)明(一個(gè)servlet程序和一個(gè)JSP程序):
l querymedicine java (藥 querymedicine )
包裹藥;
導(dǎo)入 javax.servlet.*;
導(dǎo)入 javax.servlet.http.*;
導(dǎo)入 java.io.*;
導(dǎo)入 java.util.*;
導(dǎo)入 java.sql.*;
導(dǎo)入 Medicine.medicinelist;
導(dǎo)入 Medicine.searchData;
////////////////////////////////////////////////////
// 接---mutiquery.jsp頁(yè)面,并從request中得到5條查詢條件 ///
// 按條件查詢藥品,并將結(jié)果存進(jìn)session的“medicinelist”中。 ///
// 張乾 2000年3月15日 ///
////////////////////////////////////////////////////
公共的班 querymedicine 擴(kuò)大 HttpServlet {
私人的 DBConnectionManager connMgr;
//初始化全球的變量
公共的空的 init ( ServletConfig 設(shè)置)扔 ServletException {
super.init(config);
connMgr = DBConnectionManager.getInstance();
}
//========================處理 HTTP Get 請(qǐng)求============================
公共的空的 doGet ( HttpServletRequest請(qǐng)求 , HttpServletResponse反應(yīng))
扔 ServletException , IOException {
陳述 stmt=null;
連接反對(duì)= connMgr.getConnection("medicine");
如果(空的反對(duì)==){
response.sendRedirect("/medicine/con_error.html");
歸還;
}
// ==================== 創(chuàng)建數(shù)據(jù)庫(kù)Statement =============================
試一試{
stmt=con.createStatement();
}
抓住(例外 e )
{
connMgr.freeConnection("medicine",con);
response.sendRedirect("/medicine/stmt_error.html");
歸還;
}
//-------------------------------------------------------------
long all_count=0;//存滿足條件的藥品總數(shù)
//===================從request中得到session======================
試一試{
HttpSession會(huì)議= request.getSession(false);
如果(空的會(huì)議==){
connMgr.freeConnection("medicine",con);
response.sendRedirect("/medicine/session_error.html");
歸還;
}
//-----------------------------------------------------------
//======從“下一頁(yè)”提交來(lái)的參數(shù)取得前頁(yè)最后一條數(shù)據(jù)的藥品編碼=======
串 ll_pos=request.getParameter("pos");
//如果pos=-1則表示要從頭開(kāi)始查
//----------------------------------------------------------
//=====================查詢用的SQL語(yǔ)句串==========================
繩sqlstatment=& quot ;選擇 medicines.ypbm, medsmalltypes.zlmc, medsupertypes.clmc,
medtypes.dlmc, medicines.ypm, medicines.zyyx, medicines.ypzy來(lái)自藥,
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 ();
同步(會(huì)議){
slist=(searchData)session.getAttribute("searchList");
}
if(ll_pos.equals("-1")){
//===表示不是由“下一頁(yè)”過(guò)來(lái)要從頭開(kāi)始查數(shù)據(jù)==========
如果( slist ! =null ){
同步(會(huì)議){
session.removeAttribute("searchList");
}
}
slist=新建 searchData ();
//=============從設(shè)置查詢條件頁(yè)面取得查詢條件的參數(shù)===================
zlbm=request.getParameter("zlbm");
dlbm=request.getParameter("dlbm");
clbm=request.getParameter("clbm");
zyyx=request.getParameter("zyyx");
ypm=request.getParameter("ypm");
//------------------------------------------------------
//=================將查詢條件參數(shù)通過(guò)Vector存到session中==========
slist.setZlbm ( zlbm );
slist.setDlbm ( dlbm );
slist.setClbm ( clbm );
slist.setZyyx ( zyyx );
slist.setYpm ( ypm );
同步(會(huì)議){
session.setAttribute (& quot ; searchList & quot ;, slist );
}
//---------------------------------------------------------
}
//--------------------------------------------------------
另外
{
//============================取出查詢條件參數(shù)====================
如果( 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 ;選擇數(shù)(*)來(lái)自藥在哪兒del_flag=0& quot ;;
//=====================根據(jù)條件參數(shù)設(shè)置SQL語(yǔ)句=======================
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 ;;的命令
//-------------------------------------------------------------
矢量列表 =新建矢量();
//================= 設(shè)置一頁(yè)顯示的數(shù)據(jù)條數(shù)(一次檢索出的數(shù)據(jù)條數(shù))===========
stmt.setMaxRows(25);
//----------------------------------------------------------------------
//===================執(zhí)行查詢將結(jié)果放到ResultSet中================
ResultSet rs = stmt.executeQuery(sqlstatment);
ResultSet rs2= stmt.executeQuery(sql2);
//------------------------------------------------
if(rs==null){ //如果沒(méi)有查詢結(jié)果數(shù)據(jù)
如果( stmt ! =null ) stmt.close();
stmt.setMaxRows(0);
connMgr.freeConnection("medicine",con);
response.sendRedirect("/medicine/no_medicine.html");//定向到一個(gè)頁(yè)面
歸還;
}
//====================將藥品信息填入數(shù)據(jù)對(duì)象并存入Vector中================
if(rs2.next()){
all_count=rs2.getLong(1);//取得總條數(shù)
}
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中===========================
同步(會(huì)議){
session.setAttribute("medicinelist",list);
}
//-----------------------------------------------
}抓住( SQLException e ){
connMgr.freeConnection("medicine",con);
response.sendRedirect("/Medicine/sql_error.html");
歸還;}
//=======================重定向到一個(gè)JSP頁(yè)面==========================
串 url="/medicine/querymedicine.jsp?all_count="+all_count;
ServletContext sc = getServletContext ();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request,反應(yīng));
//-------------------------------------------------------
}
公共的空破壞(){
// =================== 在Servlet退出時(shí)終止數(shù)據(jù)庫(kù)連接,取消Statement對(duì)象
如果( connMgr ! =null ) connMgr.release();
//------------------------------------------------------------------------
}
//========================處理HTTP Post 請(qǐng)求 ============================
公共的空的 doPost ( HttpServletRequest請(qǐng)求 , HttpServletResponse反應(yīng))
扔 ServletException , IOException {
doGet (請(qǐng)求 ,反應(yīng));
}
//==========================取得 Servlet 信息 ============================
公共的繩 getServletInfo (){
回來(lái) "medicine.querymedicine信息& quot ;;
}
}
l querymedicine.jsp
<%@頁(yè)面語(yǔ)言=& quot ; java & quot ;session=& quot ;真實(shí)的& quot ; import="java.util.*,
Medicine.method, Medicine.medicinelist"contentType="text/html;charset=gbk" %>
<手跡語(yǔ)言=& quot ; JavaScript & quot ;>
功能下一條 (){
var ls_pos=document.form2.maxpos.value;
document.location="/servlet/Medicine.querymedicine?pos="+ls_pos;
}
功能詳細(xì)( 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;
同步(會(huì)議){
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>明細(xì)</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=明細(xì)></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");
長(zhǎng)的長(zhǎng)的 temp=新建 ( ssll );
長(zhǎng)cou= temp.longValue();
if(sklist.size()==25&&cou>25)
{%>
<input type=button value="下頁(yè)"onclick="next(1);">
<%}%>
<%
同步(會(huì)議){
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>
<!--完成 -->