如何用JSTL和EL来实现简单的分页

编程思想:

1.需获取数据库总数据数,规定每页显示数据数量,数据总页数;

2.设total为总数据数,totalpage为总的页数,pageSize为一页有多少数据


一、数据层获取总页数:

int  pageNo;
if(request.getParameter("pageNo")!=null)
 {
  String pageNos = request.getParameter("pageNo");
  pageNo = Integer.parseInt(pageNos);
}else{
  pageNo = 1;
  }



查询指定页的数据

1.pageNo为指定页面的页数,pageSize为一页显示的数据有多少,page表示为当前页

2.公式:上一页 M = (page - 1)*pageSize+ 1; 下一页 N= (page + 1)*pageSize +1。

3.sql查询语句:"select * from 表名 order by id limit ?,?"

4.PrepareStatment中存储查询页数的总数据量pageSel =((pageNo-1)*pageSize)和每页的数据量per,即表示从第(pageSel+1)数据查询开始到第(pageSel+per)数据,即可表示查询到指定页面的数据。

5.查询的结果给rs,遍历rs后给表的对象存储值,即可用User(只含sett 和 gett方法)来存储查询的数据。

6.用list把查询的数据(User)加入到其中,返回list。


代码如下:

  StringBuffer sql = new StringBuffer("select * from user");  
//user为表名
 sql.append(" order by id limit ?,?"); 
int pageSize = 9;    //默认一页的数据为9条 
int page = (pageNo - 1) * 9; //计算总数据量
 PreparedStatement pstmt = con.prepareStatement(sql.toString()); 
pstmt.setInt(1, page); pstmt.setInt(2, pageSize); 
return pstmt.executeQuery();



所需类

1.所要创建的类有Connection连接数据库的类。

2.XXXDao类的方法getPage()和listXXX()分别用来计算总页数和查询指定页的数据。

3.存储数据的类,此类中用User来作为例子


二、控制层


1.创建servlet类控制处理请求信息;

2.在doPost()中获取指定页面的页数,设置参数pageNos为请求传入的指定页数,默认存在pageNos=1,当pagenos不为null时,pageNo = pageNos;(这里需要注意pageNos的属性,一般为String,需要强转为int)

3.调用ListXXX()方法,获取查询数据的list;

4.将总页数totalpage、查询的数据list表、指定页数pageNo。通过request.setAttribute()方法继续发出请求,request.getRequestDisPatcher("xxx.jsp").forward(request,response);

代码如下:

int  pageNo;
if(request.getParameter("pageNo")!=null)
 {    
String pageNos = request.getParameter("pageNo");    
pageNo = Integer.parseInt(pageNos);          
 }else{   
 pageNo = 1;    
}



三、表示层该层即为请求的回应,显示数据。

这里使用EL和JSTL来输出结果,思路如下:

1.使用JSTL中的c:forEach方法来遍历处理上述request传入的list,具体做法如下:

---var中的变量名可任意,这里用x表示。

${x.id} --${x.id}表示直接输出x中的id;

....


c:forEach主要是为了将查询出来的list进行遍历,输出数据。

2.使用 标签来实现分页功能,主要是为了传递参数pageNo给数据层,数据层查询出的结果经过控制层遍历后即可在表示层中输出。

代码如下:

你可能感兴趣的:(java基础,java,web基础)