动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   Jsp → 阅读文章

 在JSP页面中实现检索数据的分页显示

作者来源: 
阅读 1672 人次 , 2006-3-29 4:23:00 


  在页面中,当检索的数据很多时,通常需要分页显示数据,并要实现翻页。

下面将通过一些例程来说明实现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>

<!--完成 -->

 本文Tags分页  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:在jsp中作HTTP认证的方法
· 下一篇:JSP数据库连接池的必要性
· 编写线程安全的JSP程序
· JSP学习心得
· Servlet和JSP概述
· 应用JDOM处理数据库到XML转换的JSP实现 (二)
· JSP连接各类数据库大全(4)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077