pager-taglib分页标签使用方法

2008.10.09 / 标签: ,,,,,,,, / 分类: J2EE技术

以前写的那个[jsp中实现分页显示数据] 方法不通用,得找个分页标签。关于pager-taglib的使用方法网上虽说一大堆,但是同样费我不少脑细胞去看。有的代码不齐全,有的根本就是错误的,有的写的很潦草,看的我是云里雾里的,经过本人耗费大量的脑细胞奋战N个小时终于搞出了点猫腻。
想明白了,写出来运行成功了,我才发现其实用法很简单,没那些人写的那么麻烦。
首先当然还是要导pager-taglib.jar包了,可以去http://jsptags.com/tags/navigation/pager/index.jsp下载,从下载下来的war文件中找到pager-taglib.jar包以及pager-taglib.tld文件。将pager-taglib.tld文件放在WEB-INF目录下,将pager-taglib.jar放在WEB-INF/lib目录下(JBuilder中的导入方法可以参考[Servlet中实现文件上传] )。
新建一个bean文件定义如下两个方法(不一定非要这个样子):

 
  1. /**
  2.      * 该方法用于获得数据总数
  3.      * @return int
  4.      */
  5. public int getArticlesCount() {
  6.         String sql = "SELECT COUNT(*) FROM blog_Article";
  7.         dbc = new DataSource();
  8.         stmt = dbc.getPreparedStatement(sql);
  9.         rs = dbc.getResultSet(stmt);
  10.         int count = 0;
  11.         try {
  12.             if(rs.next()){
  13.               count = rs.getInt(1);
  14.             }
  15.         } catch (SQLException ex) {
  16.             ex.printStackTrace();
  17.         } finally {
  18.             dbc.closeConnection();
  19.         }
  20.         return count;
  21.     }
  22.     
  23.     /**
  24.      * 该方法用于数据分页
  25.      * @param begin int
  26.      * @param end int
  27.      * @return ArrayList
  28.      */
  29. public ArrayList getArticlesAll(int begin,int end) {
  30.         String sql = "select top "+end+" * from blog_Article where (log_ID <= (select min(log_ID) from (select top "+begin+" log_ID from blog_Article order by log_PostTime desc) as t)) order by log_PostTime desc";
  31.         ArrayList list = new ArrayList();
  32.         dbc = new DataSource();
  33.         stmt = dbc.getPreparedStatement(sql);
  34.         rs = dbc.getResultSet(stmt);
  35.         try {
  36.             while (rs.next()) {
  37.                 ArticleBean article = new ArticleBean();
  38.                 article.setId(rs.getInt(1));
  39.                 //赋值操作…
  40.                 article.setTag(rs.getString(10));
  41.                 article.setIsTop(rs.getByte(11));
  42.                 list.add(article);
  43.             }
  44.         } catch (SQLException ex) {
  45.             ex.printStackTrace();
  46.         } finally {
  47.             dbc.closeCon
    nection();
  48.         }
  49.         return list;
  50.     }

 

接下来新建一个JSP页面(需要JSTL):

 
  1. <%@ page contentType="text/html; charset=GBK" import="java.util.*,com.nkblog.bean.ArticleBean,com.nkblog.dbc.*" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <%@ taglib uri="WEB-INF/pager-taglib.tld" prefix="pg" %>
  4. <%
  5. request.setCharacterEncoding("GBK");
  6. String offset = request.getParameter("pager.offset");//pager.offset为此分页标签内置变量用于传递页数
  7.         int page = 0;
  8.         if(offset == null){
  9.         //若offset为null则是第一次访问,所以显示第一页
  10.             page= 1;
  11.         }else{
  12.         //反之,则按照传递来的页数来分
  13.             page = Integer.parseInt(offset)+1;
  14.         }
  15. //获取数据总数        
  16. int dataTotal = ArticleManager.getArticlesCount();
  17. //查询分页数据,10为每页要显示的数据量,可自定义
  18. ArrayList articles = ArticleManager.getArticlesAll(page,10);
  19. %>
  20. <%
  21. for(int i=0;i<articles.size();i++)
  22. {
  23. //输出取出的10条数据…
  24. }
  25. %>
  26. <pg:pager scope="request" maxIndexPages="5" index="center" maxPageItems="10" url="index.jsp" items="<%=dataTotal%>" %>" export="currentPageNumber=pageNumber">
  27.         <pg:first><a href="${pageUrl}">首页</a></pg:first>
  28.         <pg:prev><a href="${pageUrl}">前页</a></pg:prev>
  29.   <pg:page>
  30.   </pg:page>
  31.         <pg:pages>
  32.             <c:choose>
  33.             <c:when test="${pageNumber eq currentPageNumber }">
  34.             <font color="red">${pageNumber }</font>
  35.             </c:when>
  36.             <c:otherwise>
  37.             <a href="${pageUrl }">${pageNumber}</a>
  38.             </c:
    otherwise>
  39.             </c:choose>
  40.    </pg:pages>
  41.         <pg:next><a href="${pageUrl}">下页</a></pg:next>
  42.         <pg:last><a href="${pageUrl}">尾页</a></pg:last>
  43. </pg:pager>

接下来具体说明上面的分页标签<pg:pager>
maxIndexPages为分页条个数,形如:< << 1 2 3 4 5 >> >
maxPageItems为每页要显示的数据量
url为处理分页请求的文件,可以是JSP或Servlet。当程序运行起来后,会以index.jsp?pager.offset=5的形式传递页数。
items为数据总数,pager-taglib会自动根据以上参数进行分页。
需要进行修改的也就上面这几个参数,起初看别人写的方法,我以为只要导入这个标签然后给定一个List数据集合,它就完全自动的跟也并显示数据了,汗~~也不知道我这么写会有几个看得懂的,估计懂的人有,但是能看明白我写的就少了…我发现原来代码写起来简单,但是要给别人将明白了真的好难啊。

 

J2EE MVC模式中首页初始化

2008.10.04 / 标签: ,,,,,,, / 分类: J2EE技术

虽然也学了这么久的J2EE了(基础型),但是我一直都搞不明白:MVC模式是要分三层的,显示层、控制层(业务逻辑层)及数据层,业务逻辑层才能访问数据层,而显示层不能够直接访问数据层。既然如此,那么网站的首页所需要的数据都是来自数据库的,是要动态读取的,这就要在jsp中直接访问数据层,岂不是相互矛盾了吗?
去了几个技术论坛看了看,有人说那只是一个高效的框架模型,不一定非要遵守,可以直接在首页jsp中调用数据层的方法,活人岂能被尿憋死?话虽说有那么点道理,不过我还是不想这么试。
我是这么想的:
方法1.能不能打开网站地址时候访问的第一个文件是一个Servlet,在Servlet中获得首页用于显示所需要的所有数据,然后将它放在request中,接着在使用
request.getRequestDispatcher("index.jsp").forward(request, response);
跳转到真实的首页,如此即可在index.jsp中从request中获得所要的数据了。那么,如何才能打开网址就直接访问Servlet呢?在网站的根目录下WEB-INF中的web.xml中有这么一对标签:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
类似于配置IIS中的默认首页 ,我们把这里的index.jsp改为对应的Servlet即可。

方法2.创建一个过滤器,专门用来过滤首页文件,当请求首页文件时就在过滤器中取数据。过滤器本身其实也是Servlet。
我就晕了,无论用这里面哪一个方法,那这里面的Servlet到底属于哪一层啊?是不是我太钻牛角尖了?

jsp分页显示之封装bean及数据库连接公共类

2008.05.09 / 标签: ,, / 分类: J2EE技术
Sofa

在上一篇[jsp中实现分页显示数据] 中,我们提到了这段代码 import="java.util.ArrayList,com.dbc.DBC,com.jobs.JobsBean" 其中ArrayList是java自己本身的util包中的,DBC和JobsBean是我们自己创建的,下面我们来创建他们。 在我们上次创建的工程中,右键单击Project Source选择:new->package。写入我们的包名,例如:com.jobs 右键我们刚才创建的com.jobs包,选择:new->class->输入类名(如:JobsBean)->ok。接下来对JobsBean进行编码。双击JobsBean.java文件,选择:Bean->Properties->Add Property.Property Name中输入变量名,Type中输入变量的数据类型,输入完成之后单击ok按钮。回到Source中我们可以看到生成的代码如下:

package com.jobs;

public class JobsBean {
    
private int id;
    
private String desc;
    
private int min;
    
private int max;
    
public int getId() {
        
return id;
    }

    public String getDesc() {
        
return desc;
    }

    public int getMin() {
        
return min;
    }

    public int getMax() {
        
return max;
    }

    public void setId(int id) {
        
this.id id;
    }

    public void setDesc(String desc) {
        
this.desc desc;
    }

    public void setMin(int min) {
        
this.min min;
    }

    public void setMax(int max) {
        
this.max max;
    }
}

创建dbc数据库连

jsp中实现分页显示数据

2008.05.08 / 标签: , / 分类: J2EE技术
Sofa

本例目的:实现分页查询mssql中自带的pubs数据库中的jobs表。 首先打开JBuilder2006创建一个web模块。新建一个jsp文件,例如:list.jsp用于显示数据。

<%@page contentType="text/html; charset=GBK" import="java.util.ArrayList,com.dbc.DBC,com.jobs.JobsBean"%>
<
html>
<
head>
<
title>list</title>
</
head>
<
body bgcolor="#ffffff">
<%
  
int pageNum 0;
  
try {
    
pageNum Integer.parseInt(request.getParameter("page"));//接收url重写参数
  
}
  
catch (Exception ex) {
    
pageNum 0;
  }
  
int 0;
  
if (pageNum <= 0) {//判断是否小于最小页数
    
1;
    
pageNum 0;
  }
  
else {
    
pageNum 10 1;
  }
  
ArrayList array new ArrayList();
  
JobsBean job new JobsBean();
  
DBC db new DBC();
  
int count db.getCount();//获取最大页数
  
if(pageNum count){//判断是否超过最大页数
  &nbs
p; 
count*10+1;
    
pageNum count;
  }
  
array db.getJobs(a);//查询数据
%>
<
center>
  <
table border="1" bgcolor="green">
    <
tr>
      <
td>id</td>
      <
td>desc</td>
      <
td>min</td>
      <
td>max</td>
      <
td colspan="2">        
        
&nbsp;
        

      
</td>
    <%
      
for (int 0array.size(); i++) {//迭代array
        
job = (JobsBeanarray.get(i);//强制转换成JobsBean类型
    
%>

    <tr>//使用get()方法取值
      
<td><%=job.getId() %>      </td>
      <
td><%=job.getDesc() %>      </td>
      <
td><%=job.getMin() %>      </td>
      <
td><%=job.getMax() %>      </td>
      <
td>//以下用于url重写实现后面将要实现的修改,删除等操作
        
<a href="edit.jsp?id=<%=job.getId()%>">修改</a>
      </
td>
      <
td>
        <
a href="del.jsp?id=<%=job.getId()%>">删除</a>
      </
td>
    </
tr>
  <%}  %>
    <
tr>
      <
td>
        <
a href="list.jsp?page=0">首页</a>
      </
td>
      <
td>
        <
a href="list.jsp?page=<%=pageNum-1%>">上一页</a>
      </
td>
      <
td>
        <
a href="list.jsp?page=<%=pageNum+1%>">下一页</a>
      </
td>
      <
td>
        <
a href="list.jsp?page=<%=count%>">末页</a>
      </
td>
    </
tr>
  </
table>
</
center>
</
body>
</
html>

接下来我们对上面这段代码进行分析。 import="java.util.ArrayList,com.dbc.DBC,com.jobs.JobsBean" 用于导入我们需要的包和bean
,具体将在下一篇讲到。

int pageNum 0;
  
try {
    
pageNum Integer.parseInt(request.getParameter("page"));
  }
  
catch (Exception ex) {
    
pageNum 0;
  }
  
int 0;
  
if (pageNum <= 0) {
    
1;
    
pageNum 0;
  }
  
else {
    
pageNum 10 1;
  }
  
ArrayList array new ArrayList();
  
JobsBean job new JobsBean();
  
DBC db new DBC();
  
int count db.getCount();
  
if(pageNum count){
    
count*10+1;
    
pageNum count;
  }
  
array db.getJobs(a);

上面这段代码中我们声明一个int型的pageNum并使用pageNum = Integer.parseInt(request.getParameter("page"))来接收list.jsp在进行url重写的时候传递来的参数。int型的a用于计算出我们要查询从第几条记录开始的10条记录。 int count = db.getCount(); if(pageNum > count){ a = count*10+1; pageNum = count; } array = db.getJobs(a); db.getCount()将返回数据按每10条一页可分出的页数,并将其与url重写时传递的参数进行比较,若pageNum大于count(即:所要查看的页数超过最大页数)则始终查询最后1页数据。使用array存储查询出的数据。

<table border="1" bgcolor="green">
    <tr>
      <td>
id</td>
      <td>
desc</td>
      <td>
min</td>
      <td>
max</td>
      <td 
colspan="2">操作</td>
    <%
      
for (int i = 0; i < array.size(); i++) {
        job = (JobsBean) array.get(i);
    
%>

    <tr>
      <td><%=
job.getId() %>      </td>
      <td><%=
job.getDesc() %>      </td>
      <td><%=
job.getMin() %>      </td>
      <td><%=
job.getMax() %>      </td>
      <td>
        <a 
href="edit.jsp?id=<%=job.getId()%>">修改</a>
      </td>
      <td>
        <a 
href="del.jsp?id=<%=job.getId()%>">删除</a>
      </td>
    </tr>
  <%
}  %>
    <tr>
      <td>
        <a 
href="list.jsp?page=0">首页</a>
      </td>
      <td>
        <a 
href="list.jsp?page=<%=pageNum-1%>">上一页</a>
      </td>
      <td>
        <a 
href="list.jsp?page=<%=pageNum+1%>">下一页</a>
      </td>
      <td>
        <a 
href="list.jsp?page=<%=count%>">末页</a>
      </td>
    </tr>
  </table>
上面这段代码使用for循环输出array中存储的数据。下面的首页,上一页等均使用url重写进行查询。

无觅相关文章插件,快速提升流量