在页面中,当检索的数据很多时,通常需要分页显示数据,并要实现翻页。
下面将通过一些例程来说明实现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>