在jsp页面中实现检索数据的分页显示_jsp技巧
时间:2023-05-08 07:07: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查询条件查询条件 ///
// 按条件查询药品,并将结果存入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=-一是说要从头开始检查
//———————————————————-
//=====================查询用的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.getZyy();
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
Medicine.method, Medicine.medicinelist”contentType=”text/html;charset=gbk” %>
功能下一条 (){
var ls_pos=document.form2.maxpos.value;
document.location=”/servlet/Medicine.querymedicine?pos=”+ls_pos;
}
功能详细( ypbm ){
document.location=”/servlet/Medicine.Detail?ypbm=”+ypbm;
}
< IFRAME宽度=760高度=130 NORESIZE SCROLLING=否 FRAMEBORDER=0
MARGINHEIGHT=0MARGINWIDTH=0SRC=& quot ; ..\medicinetitle.html”>
方法 md =新建方法();
矢量 sklist;
同步(会议){
sklist =(矢量) session.getAttribute(“medicinelist”);
}
%>
如果( sklist ==空的或 sklist.size() <=0)
{
response.sendRedirect(“/medicine/no_medicine.html”);
归还;
}
另外
{%>
bordercolorlight=”#FFFFFF”bordercolordark=”#000000″>
明细 商品名称 超类 大类 子类 描述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 ;”;
}
out.println(“
”);out.println(“
< td align=center > ”);out.println(lshref+d.getYpm()+”
& quot ;);out.println(d.getClmc()+”
& quot ;+d.getDlmc()+”
& quot ;);out.println(d.getZlmc()+”
& quot ;+md.notNull(d.getZyyx())+”
”);out.flush();
}
%>
>
< /表格 >
}
%>
串 ssll=request.getParameter(“all_count”);
长的长的 temp=新建 ( ssll );
长cou= temp.longValue();
if(sklist.size()==25&&cou>25)
{%>
同步(会议){
if(session.getAttribute(“medicinelist”)!=null){
session.removeValue(“medicinelist”);
}
}
%>
< IFRAME宽度=760高度=140 NORESIZE SCROLLING=否 FRAMEBORDER=0
MARGINHEIGHT=0MARGINWIDTH=0SRC=& quot ; ..\bottom.html”>