本文目录
- Jsp中的分层,分页怎么弄
- JSP页面分页怎么做
- JSP中, 怎样实现分页功能(代码)
- 在JSP中如何实现分页技术啊
- jsp中的分页怎么写
- jsp中如何分页显示查询到的数据
- jsp如何用c标签实现分页
- jsp 如何将查询结果实现分页,最好简单易懂…
Jsp中的分层,分页怎么弄
你可以用hibernate框架来实现,通过使用Query对象的setFirstResult(int firstResult)方法来设置第一条记录的位置和setMaxResult(int MaxResult)设置最大返回条数来实现分页。你只需要传这两个参数就行了。
int MaxResult:设置最大返回条数既是每页显示多少条。
int firstResult:设置第一条记录的位置可以这样算:MaxResult * 当前页数-1
public class PageBean {
private int currentPage = 1; // 当前页
private int pageSize = 10; // 每页显示条数
private int totalRecords = 0;// 总条数
/**
* 计算有没有下一页
*
* @return
*/
public boolean hasNext() {
if (totalRecords % pageSize == 0) {
return totalRecords / pageSize 》 currentPage ? true : false;
} else {
return (totalRecords / pageSize + 1) 》 currentPage ? true : false;
}
}
// 第一条记录的位置
public int getFirstResult() {
return (currentPage - 1) * pageSize;
}
/**
* 计算有没有前一页
*
* @return
*/
public boolean hasPrew() {
return currentPage 》 1 ? true : false;
}
/**
* 最后一页
* @return
*/
public int getLast() {
if (totalRecords % pageSize == 0) {
return totalRecords / pageSize;
} else {
return (totalRecords / pageSize + 1);
}
省略get,set方法
}
然后在Dao里这样写:
public List《V》 find(PageBean pb, String hql, Object... params) {
Session session = HibernateSessionFactory.getSession();
/*
* 统计总记录数
*/
String totalPageHql = “select count(*) “ + hql.substring(hql.toLowerCase().indexOf(“from“));
Query totalQuery = session.createQuery(totalPageHql);
for (int i = 0; i 《 params.length; i++) {
totalQuery.setParameter(i, params[i]);
}
int total = Integer.parseInt(String.valueOf((Long)totalQuery.uniqueResult()));
pb.setTotalRecords(total);
/*
* 查询分页记录
*/
Query query = session.createQuery(hql);
for (int i = 0; i 《 params.length; i++) {
query.setParameter(i, params[i]);
}
query.setFirstResult(pb.getFirstResult());
query.setMaxResults(pb.getPageSize());
List《V》 list = query.list();
HibernateSessionFactory.closeSession();
return list;
}
这是我一直用的分页代码。。
JSP页面分页怎么做
分页须知知识点:
(1)JDBC2.0的可滚动结果集。
(2)HTTP GET请求。
一、可滚动结果集
Connection con = DriverManager.getConnection();
PreparedStatement stmt = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery();
常用方法:
(1)rs.absolute(n); 可以将指针跳到第n行。
(2)rs.relative(n); 可以将指针相对向下或向上n行。
(3)rs.first();
(4)rs.last();
(5)int curRow = rs.getRow(); 指针指向的当前行
二、功能实现分解
1.计算结果的个数
rs.last();
int size = rs.getRow();
即可得到结果的个数。
2.得到需要分几页
如果一页能够放5条记录,则
int pageCount = (size%5==0)?(size/5):(size/5+1);
即可获得需要分几页。
3.控制一页中规定显示记录个数
如果一页能显示5条记录,可以通过使用count进行计数。
int count = 0;
do{
if(count》=5) break;
.....
count++;
}while(rs.next());
通过break语句,能够使其显示到超过规定条目就跳出。
4.如何知道当前是第几页
通过HTTP get的特点,在地址栏中标明当前地址,如
《%@ page contentType=“text/html“ pageEncoding=“GB2312“ language=“java“%》
《%@ page import=“java.sql.*“%》
《html》
《head》
《title》hello《/title》
《/head》
《body》
《table border=“1“ spacing=“2“》
《%!
public static final String DRIVER = “com.mysql.jdbc.Driver“;
public static final String USER = “root“;
public static final String PASS = “12345“;
public static final String URL = “jdbc:mysql://localhost:3306/MLDN“;
public static final int PAGESIZE = 5;
int pageCount;
int curPage = 1;
%》
《%
//一页放5个
String user = null;
String pass = null;
try{
Class.forName(DRIVER);
Connection con = DriverManager.getConnection(URL,USER,PASS);
String sql = “SELECT empno,ename,job,hiredate,sal,comm FROM emp“;
PreparedStatement stat = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stat.executeQuery();
rs.last();
int size = rs.getRow();
pageCount = (size%PAGESIZE==0)?(size/PAGESIZE):(size/PAGESIZE+1);
String tmp = request.getParameter(“curPage“);
if(tmp==null){
tmp=“1“;
}
curPage = Integer.parseInt(tmp);
if(curPage》=pageCount) curPage = pageCount;
boolean flag = rs.absolute((curPage-1)*PAGESIZE+1);
out.println(curPage);
int count = 0;
do{
if(count》=PAGESIZE)break;
int empno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
Date hiredate = rs.getDate(4);
float sal = rs.getFloat(5);
int comm = rs.getInt(6);
count++;
%》
《tr》
《td》《%=empno%》《/td》
《td》《%=ename%》《/td》
《td》《%=job%》《/td》
《td》《%=hiredate%》《/td》
《td》《%=sal%》《/td》
《td》《%=comm%》《/td》
《/tr》
《%
}while(rs.next());
con.close();
}
catch(Exception e){
}
%》
《/table》
《a href = “multipage.jsp?curPage=1“ 》首页《/a》
《a href = “multipage.jsp?curPage=《%=curPage-1%》“ 》上一页《/a》
《a href = “multipage.jsp?curPage=《%=curPage+1%》“ 》下一页《/a》
《a href = “multipage.jsp?curPage=《%=pageCount%》“ 》尾页《/a》
第《%=curPage%》页/共《%=pageCount%》页
《/body》
《/html》
JSP中, 怎样实现分页功能(代码)
分页显示是web数据库应用中经常需要遇到的问题,当用户的数据库查询结果远远超过了计算机屏幕的显示能力的时候,我们该如何合理的将数据呈现给用户呢?答案就是数据库分页显示,可以完美的解决上述问题.下面是一个数据库分页操作的通用实例,对任何数据库平台上的分页功能都有很好的借鉴意义. 【推荐阅读:项目要用到的主要源代码 】
//变量声明 【扩展信息:J2ME学习笔记(三) 】
<%
java.sql.connection sqlcon; //数据库连接对象
java.sql.statement sqlstmt; //sql语句对象
java.sql.resultset sqlrst; //结果集对象
java.lang.string strcon; //数据库连接字符串
java.lang.string strsql; //sql语句
int intpagesize; //一页显示的记录数
int introwcount; //记录总数
int intpagecount; //总页数
int intpage; //待显示页码
java.lang.string strpage;
int i;
//设置一页显示的记录数
intpagesize = 2;
//取得待显示页码
strpage = request.getparameter(“page“);
if(strpage==null){//表明在querystring中没有page这一个参数,此时显示第一页数据
intpage = 1;
}
else{//将字符串转换成整型
intpage = java.lang.integer.parseint(strpage);
if(intpage<1) intpage = 1;
}
在JSP中如何实现分页技术啊
title: JSP分页技术实现
summary:使用工具类实现通用分页处理
author: evan_zhao
email: evan_zhao@hotmail.com
目前比较广泛使用的分页方式是将查询结果缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时第一次查询遍历结果集会耗费很长时间,并且缓存的数据也会占用大量内存,效率明显下降。
其它常见的方法还有每次翻页都查询一次数据库,从ResultSet中只取出一页数据(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录)。这种方式在某些数据库(如oracle)的JDBC实现中差不多也是需要遍历所有记录,实验证明在记录数很大时速度非常慢。
至于缓存结果集ResultSet的方法则完全是一种错误的做法。因为ResultSet在Statement或Connection关闭时也会被关闭,如果要使ResultSet有效势必长时间占用数据库连接。
因此比较好的分页做法应该是每次翻页的时候只从数据库里检索页面大小的块区的数据。这样虽然每次翻页都需要查询数据库,但查询出的记录数很少,网络传输数据量不大,如果使用连接池更可以略过最耗时的建立数据库连接过程。而在数据库端有各种成熟的优化技术用于提高查询速度,比在应用服务器层做缓存有效多了。
在oracle数据库中查询结果的行号使用伪列ROWNUM表示(从1开始)。例如select * from employee where rownum《10 返回前10条记录。但因为rownum是在查询之后排序之前赋值的,所以查询employee按birthday排序的第100到120条记录应该这么写:
[pre] select * from (
select my_table.*, rownum as my_rownum from (
select name, birthday from employee order by birthday
) my_table where rownum 《120
) where my_rownum》=100
[/pre]
mySQL可以使用LIMIT子句:
select name, birthday from employee order by birthday LIMIT 99,20
DB2有rownumber()函数用于获取当前行数。
SQL Server没研究过,可以参考这篇文章:
1.Page.java
2.RowSetPage.java(RowSetPage继承Page)
3.PagedStatement.java
4.PagedStatementOracleImpl.java(PagedStatementOracleImpl继承PagedStatement)
您可以任意使用这些源代码,但必须保留author evan_zhao@hotmail.com字样
///////////////////////////////////
//
// Page.java
// author: evan_zhao@hotmail.com
//
///////////////////////////////////
package page;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
/**
* Title: 分页对象《br》
* Description: 用于包含数据及分页信息的对象《br》
* Page类实现了用于显示分页信息的基本方法,但未指定所含数据的类型,
* 可根据需要实现以特定方式组织数据的子类,《br》
* 如RowSetPage以RowSet封装数据,ListPage以List封装数据《br》
* Copyright: Copyright (c) 2002 《br》
* @author evan_zhao@hotmail.com 《br》
* @version 1.0
*/
public class Page implements java.io.Serializable {
public static final Page EMPTY_PAGE = new Page();
public static final int DEFAULT_PAGE_SIZE = 20;
public static final int MAX_PAGE_SIZE = 9999;
private int myPageSize = DEFAULT_PAGE_SIZE;
private int start;
private int avaCount,totalSize;
private Object data;
private int currentPageno;
private int totalPageCount;
/**
* 默认构造方法,只构造空页
*/
protected Page(){
this.init(0,0,0,DEFAULT_PAGE_SIZE,new Object());
}
/**
* 分页数据初始方法,由子类调用
* @param start 本页数据在数据库中的起始位置
* @param avaCount 本页包含的数据条数
* @param totalSize 数据库中总记录条数
* @param pageSize 本页容量
* @param data 本页包含的数据
*/
protected void init(int start, int avaCount, int totalSize, int pageSize, Object data){
this.avaCount =avaCount;
this.myPageSize = pageSize;
this.start = start;
this.totalSize = totalSize;
this.data=data;
//System.out.println(“avaCount:“+avaCount);
//System.out.println(“totalSize:“+totalSize);
if (avaCount》totalSize) {
//throw new RuntimeException(“记录条数大于总条数?!“);
}
this.currentPageno = (start -1)/pageSize +1;
this.totalPageCount = (totalSize + pageSize -1) / pageSize;
if (totalSize==0 && avaCount==0){
this.currentPageno = 1;
this.totalPageCount = 1;
}
//System.out.println(“Start Index to Page No: “ + start + “-“ + currentPageno);
}
public Object getData(){
return this.data;
}
/**
* 取本页数据容量(本页能包含的记录数)
* @return 本页能包含的记录数
*/
public int getPageSize(){
return this.myPageSize;
}
/**
* 是否有下一页
* @return 是否有下一页
*/
public boolean hasNextPage() {
/*
if (avaCount==0 && totalSize==0){
return false;
}
return (start + avaCount -1) 《 totalSize;
*/
return (this.getCurrentPageNo()《this.getTotalPageCount());
}
/**
* 是否有上一页
* @return 是否有上一页
*/
public boolean hasPreviousPage() {
/*
return start 》 1;
*/
return (this.getCurrentPageNo()》1);
}
/**
* 获取当前页第一条数据在数据库中的位置
* @return
*/
public int getStart(){
return start;
}
/**
* 获取当前页最后一条数据在数据库中的位置
* @return
*/
public int getEnd(){
int end = this.getStart() + this.getSize() -1;
if (end《0) {
end = 0;
}
return end;
}
/**
* 获取上一页第一条数据在数据库中的位置
* @return 记录对应的rownum
*/
public int getStartOfPreviousPage() {
return Math.max(start-myPageSize, 1);
}
/**
* 获取下一页第一条数据在数据库中的位置
* @return 记录对应的rownum
*/
public int getStartOfNextPage() {
return start + avaCount;
}
/**
* 获取任一页第一条数据在数据库中的位置,每页条数使用默认值
* @param pageNo 页号
* @return 记录对应的rownum
*/
public static int getStartOfAnyPage(int pageNo){
return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE);
}
/**
* 获取任一页第一条数据在数据库中的位置
* @param pageNo 页号
* @param pageSize 每页包含的记录数
* @return 记录对应的rownum
*/
public static int getStartOfAnyPage(int pageNo, int pageSize){
int startIndex = (pageNo-1) * pageSize + 1;
if ( startIndex 《 1) startIndex = 1;
//System.out.println(“Page No to Start Index: “ + pageNo + “-“ + startIndex);
return startIndex;
}
/**
* 取本页包含的记录数
* @return 本页包含的记录数
*/
public int getSize() {
return avaCount;
}
/**
* 取数据库中包含的总记录数
* @return 数据库中包含的总记录数
*/
public int getTotalSize() {
return this.totalSize;
}
/**
* 取当前页码
* @return 当前页码
*/
public int getCurrentPageNo(){
return this.currentPageno;
}
/**
* 取总页码
* @return 总页码
*/
public int getTotalPageCount(){
return this.totalPageCount;
}
/**
*
* @param queryJSFunctionName 实现分页的JS脚本名字,页码变动时会自动回调该方法
* @param pageNoParamName 页码参数名称
* @return
*/
public String getHTML(String queryJSFunctionName, String pageNoParamName){
if (getTotalPageCount()《1){
return “《input type=’hidden’ name=’“+pageNoParamName+“’ value=’1’ 》“;
}
if (queryJSFunctionName == null || queryJSFunctionName.trim().length()《1) {
queryJSFunctionName = “gotoPage“;
}
if (pageNoParamName == null || pageNoParamName.trim().length()《1){
pageNoParamName = “pageno“;
}
String gotoPage = “_“+queryJSFunctionName;
StringBuffer html = new StringBuffer(“\n“);
html.append(“《script language=\“Javascript1.2\“》\n“)
.append(“function “).append(gotoPage).append(“(pageNo){ \n“)
.append( “ var curPage=1; \n“)
.append( “ try{ curPage = document.all[\““)
.append(pageNoParamName).append(“\“].value; \n“)
.append( “ document.all[\““).append(pageNoParamName)
.append(“\“].value = pageNo; \n“)
.append( “ “).append(queryJSFunctionName).append(“(pageNo); \n“)
.append( “ return true; \n“)
.append( “ }catch(e){ \n“)
// .append( “ try{ \n“)
// .append( “ document.forms.submit(); \n“)
// .append( “ }catch(e){ \n“)
.append( “ alert(’尚未定义查询方法:function “)
.append(queryJSFunctionName).append(“()’); \n“)
.append( “ document.all[\““).append(pageNoParamName)
.append(“\“].value = curPage; \n“)
.append( “ return false; \n“)
// .append( “ } \n“)
.append( “ } \n“)
.append( “}“)
.append( “《/script》 \n“)
.append( ““);
html.append( “《table border=0 cellspacing=0 cellpadding=0 align=center width=80%》 \n“)
.append( “ 《tr》 \n“)
.append( “ 《td align=left》《br》 \n“);
html.append( “ 共“ ).append( getTotalPageCount() ).append( “页“)
.append( “ [“) .append(getStart()).append(“..“).append(getEnd())
.append(“/“).append(this.getTotalSize()).append(“] \n“)
.append( “ 《/td》 \n“)
.append( “ 《td align=right》 \n“);
if (hasPreviousPage()){
html.append( “[《a href=’javascript:“).append(gotoPage)
.append(“(“) .append(getCurrentPageNo()-1)
.append( “)’》上一页《/a》] \n“);
}
html.append( “ 第“)
.append( “ 《select name=’“)
.append(pageNoParamName).append(“’ onChange=’javascript:“)
.append(gotoPage).append(“(this.value)’》\n“);
String selected = “selected“;
for(int i=1;i《=getTotalPageCount();i++){
if( i == getCurrentPageNo() )
selected = “selected“;
else selected = ““;
html.append( “ 《option value=’“).append(i).append(“’ “)
.append(selected).append(“》“).append(i).append(“《/option》 \n“);
}
if (getCurrentPageNo()》getTotalPageCount()){
html.append( “ 《option value=’“).append(getCurrentPageNo())
.append(“’ selected》“).append(getCurrentPageNo())
.append(“《/option》 \n“);
}
html.append( “ 《/select》页 \n“);
if (hasNextPage()){
html.append( “ [《a href=’javascript:“).append(gotoPage)
.append(“(“).append((getCurrentPageNo()+1))
.append( “)’》下一页《/a》] \n“);
}
html.append( “《/td》《/tr》《/table》 \n“);
return html.toString();
}
}
///////////////////////////////////
//
// RowSetPage.java
// author: evan_zhao@hotmail.com
//
///////////////////////////////////
package page;
import javax.sql.RowSet;
/**
* 《p》Title: RowSetPage《/p》
* 《p》Description: 使用RowSet封装数据的分页对象《/p》
* 《p》Copyright: Copyright (c) 2003《/p》
* @author evan_zhao@hotmail.com
* @version 1.0
*/
public class RowSetPage extends Page {
private javax.sql.RowSet rs;
/**
*空页
*/
public static final RowSetPage EMPTY_PAGE = new RowSetPage();
/**
*默认构造方法,创建空页
*/
public RowSetPage(){
this(null, 0,0);
}
/**
*构造分页对象
*@param crs 包含一页数据的OracleCachedRowSet
*@param start 该页数据在数据库中的起始位置
*@param totalSize 数据库中包含的记录总数
*/
public RowSetPage(RowSet crs, int start, int totalSize) {
this(crs,start,totalSize,Page.DEFAULT_PAGE_SIZE);
}
/**
*构造分页对象
*@param crs 包含一页数据的OracleCachedRowSet
*@param start 该页数据在数据库中的起始位置
*@param totalSize 数据库中包含的记录总数
*@pageSize 本页能容纳的记录数
*/
public RowSetPage(RowSet crs, int start, int totalSize, int pageSize) {
try{
int avaCount=0;
if (crs!=null) {
crs.beforeFirst();
if (crs.next()){
crs.last();
avaCount = crs.getRow();
}
crs.beforeFirst();
}
rs = crs;
super.init(start,avaCount,totalSize,pageSize,rs);
}catch(java.sql.SQLException sqle){
throw new RuntimeException(sqle.toString());
}
}
/**
*取分页对象中的记录数据
*/
public javax.sql.RowSet getRowSet(){
return rs;
}
}
///////////////////////////////////
//
// PagedStatement.java
// author: evan_zhao@hotmail.com
//
///////////////////////////////////
package page;
import foo.DBUtil;
import java.math.BigDecimal;
import java.util.List;
import java.util.Iterator;
import java.util.Collections;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
import javax.sql.RowSet;
/**
* 《p》Title: 分页查询《/p》
* 《p》Description: 根据查询语句和页码查询出当页数据《/p》
* 《p》Copyright: Copyright (c) 2002《/p》
* @author evan_zhao@hotmail.com
* @version 1.0
*/
public abstract class PagedStatement {
public final static int MAX_PAGE_SIZE = Page.MAX_PAGE_SIZE;
protected String countSQL, querySQL;
protected int pageNo,pageSize,startIndex,totalCount;
protected javax.sql.RowSet rowSet;
protected RowSetPage rowSetPage;
private List boundParams;
/**
* 构造一查询出所有数据的PageStatement
* @param sql query sql
*/
public PagedStatement(String sql){
this(sql,1,MAX_PAGE_SIZE);
}
/**
* 构造一查询出当页数据的PageStatement
* @param sql query sql
* @param pageNo 页码
*/
public PagedStatement(String sql, int pageNo){
this(sql, pageNo, Page.DEFAULT_PAGE_SIZE);
}
/**
* 构造一查询出当页数据的PageStatement,并指定每页显示记录条数
* @param sql query sql
* @param pageNo 页码
* @param pageSize 每页容量
*/
public PagedStatement(String sql, int pageNo, int pageSize){
this.pageNo = pageNo;
this.pageSize = pageSize;
this.startIndex = Page.getStartOfAnyPage(pageNo, pageSize);
this.boundParams = Collections.synchronizedList(new java.util.LinkedList());
this.countSQL = “select count(*) from ( “ + sql +“) “;
this.querySQL = intiQuerySQL(sql, this.startIndex, pageSize);
}
/**
*生成查询一页数据的sql语句
*@param sql 原查询语句
*@startIndex 开始记录位置
*@size 需要获取的记录数
*/
protected abstract String intiQuerySQL(String sql, int startIndex, int size);
/**
*使用给出的对象设置指定参数的值
*@param index 第一个参数为1,第二个为2
jsp中的分页怎么写
《[email=%@page]%@page[/email] language=“java“%》
《[email=%@page]%@page[/email] import=“java.sql.*“%》
《[email=%@page]%@page[/email] contentType=“text/html;charset=GB2312“%》
《[email=%@page]%@page[/email] import=“book.db“%》
《html》
《head》
《/head》
《body》
//开始实现连接
《jsp:useBean id=“book“ class=“book.db“ scope=“session“/》
《% book.getCon();
ResuletSet rs=book.st.executeQuery(“select top 10 from book“);
%》
//定义全局变量实现分页
《%int pagesize=10;//分页每页记录数
int total;//总的记录数
int pagecount;//分页数目
int page=0;//当前页
String strpage=Request.getParameter(“pages“);//从页面得到页数
if(strpage=null){
page=1;
}
else{
page=Interger.parseInt(strpage);
if(page《1)
{
page=1;
}
}
rs.next();
total=rs.getRow();//得到总的记录数
pagecount=(pagesize+total-1)/pagesize;//得到总页数
if(page》pagecount)
page=pagecount;
int i=0;
%》
//插入表单
《form》
《table width=“800“ border=“0“ cellpadding=“0“ cellspacing=“0“ id=“center“》
《tr》
《td width=“227“》书名《/td》
《td width=“98“》作者《/td》
《td width=“108“》出版社《/td》
《td width=“178“》价格《/td》
《/tr》
//开始实现输出
《% if(pagecount》0){
rs.absolute(pagesize*(page-1)+1);//定位记录位置
while(i《pagesize&&!rs.isAfterLast()){%》
《tr align=“center“》
《td 》《%=rs.getString(1)%》《/td》
《td 》《%=rs.getString(2)%》《/td》
《td 》《%=rs.getString(3)%》《/td》
《td 》《%=rs.getString(4)%》《/td》
《/tr》
《% rs.next();
i++;
}
}
rs.close();
%》//关闭;
《/table》
《table width=“801“ height=“89“》
《tr》
《td width=“48%“》 共《%=pagecount%》 页;第《%=page%》页 《/td》
《td width=“52%“》
//实现连接判断
《%if(page《=1){%》
首页
《%}%》
《%else{%》
《a href=“a.jsp? pages=1“》首页《/a》
《%}%》
《%if(page》1){%
《a href=“a.jsp pages=《%=page+1“%》“》下页《/a》
《%}%》
下页
《%if(page《pagecount){%》
《a href=“a.jsp? pages=《%=page-1%》“》上页《/a》
《%}%》
上页
《%if(page==pagecount){%》
《a href=“a.jsp pages=pagecount“》尾页《/a》
《%}%》
尾页
《/tr》
《/table》
《%}%》
《%
book.close();
%》
《/form》
《/body》
《/html》
jsp中如何分页显示查询到的数据
jsp中分页显示查询到的数据是通过foreach标签控制的,一般是显示首页,下一页,上一页,尾页这些连接项。
1、构建一个PageControl对象将分页所涉及到的一些关键的“控制数据“予以封装.
具体说明如下:
public int curPage ; //当前是第几页
public int maxPage ; //一共有多少页
public int maxRowCount ; //一共有多少行
public int rowsPerPage ; //每页有多少行
public yourDataType yourdata ;//装载每页的数据 关于每页所要显示的“实体数据“的载体,其实现方式多种多样,比如说在IBM电子商务系统MPE中是以bean的形式,这是一种面向对象的实现,比较的简略的实现可用java.util.Vector等,为了避免分散对核心问题的的注意力,这里用youDataType予以抽象.
public void countMaxPage() { //根据总行数计算总页数
if (this.maxRowCount % this.rowsPerPage==0){
this.maxPage = this.maxRowCount/this.rowsPerPage;
}else{
this.maxPage = this.maxRowCount/this.rowsPerPage + 1;
}
}
this.rowsPerPage其实应从配置文件中获得,这样做的好处是程序能在运行中读取从而实现动态(再)配置,简略的做法是直接写在程序中。
2、在servlet的service()方法中只需进行如下操作:
PageControl pageCtl = yourBusinessObject.listData(req.getParameter(“jumpPage“));
req.setAttribute(“pageCtl“,pageCtl);获取到显示第几页控制参数
3、pageman.jsp页面的控制输出代码
每页《%=pageCtl.rowsPerPage%》行
共《%=pageCtl.maxRowCount%》行
第《%=pageCtl.curPage%》页
共《%=pageCtl.maxPage%》页
《BR》
《%if(pageCtl.curPage==1){ out.print(“ 首页 上一页“); }else{ %》
《A HREF=“javascript:gotoPage(1)“》首页《/A》
《A HREF=“javascript:gotoPage(《%=pageCtl.curPage-1%》)“》上一页《/A》
《%}%》
《%if(pageCtl.curPage==pageCtl.maxPage){ out.print(“下一页 尾页“); }else{ %》
《A HREF=“javascript:gotoPage(《%=pageCtl.curPage+1%》)“》下一页《/A》
《A HREF=“javascript:gotoPage(《%=pageCtl.maxPage%》)“》尾页《/A》
《%}%》
转到第《SELECT name=“jumpPage“ onchange=“Jumping()“》
《% for(int i=1;i《=pageCtl.maxPage;i++) {
if (i== pageCtl.curPage){
%》
《OPTION selected value=《%=i%》》《%=i%》《/OPTION》
《%}else{%》
《OPTION value=《%=i%》》《%=i%》《/OPTION》
《%}}%》
《/SELECT》页
在页面上会呈现出形如下图:
jsp如何用c标签实现分页
jsp用c标签实现分页的方式如下:
《%@ tag language=“java“ pageEncoding=“UTF-8“%》
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ attribute name=“curIndex“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pageSize“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pagerRange“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“totalPage“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“formId“ type=“java.lang.String“ required=“true“%》
《%
long begin = Math.max(1, curIndex - pagerRange/2);
long end = Math.min(begin + (pagerRange-1),totalPage);
request.setAttribute(“p_begin“, begin);
request.setAttribute(“p_end“, end);
%》
《table class=“pager“》
《tr》
《% if (curIndex!=1){%》
《td》《a href=“javascript:gotoPage(1)“》首页《/a》《/td》
《td》《a href=“javascript:gotoPage(《%=curIndex-1%》)“》上一页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“#“》首页《/a》《/td》
《td class=“disabled“》《a href=“#“》上一页《/a》《/td》
《%}%》
《c:forEach var=“i“ begin=“${p_begin}“ end=“${p_end}“》
《c:choose》
《c:when test=“${i == curIndex}“》
《td class=“active“》《a href=“#“》${i}《/a》《/td》
《/c:when》
《c:otherwise》
《td》《a href=“javascript:gotoPage(${i})“》${i}《/a》《/td》
《/c:otherwise》
《/c:choose》
《/c:forEach》
《% if (curIndex!=totalPage){%》
《td》《a href=“#“》下一页《/a》《/td》
《td》《a href=“#“》末页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=curIndex+1%》)“》下一页《/a》《/td》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=totalPage%》)“》末页《/a》《/td》
《%}%》
《td》《a》共${totalPage}页《/a》《/td》
《td class=“input_li“》跳转到:《input type=“text“ id=“p_pageIndex“ size=“2“ value=“《c:out value=“${pageIndex}“/》“/》页 《input type=“button“ id=“gotoBtn“ onclick=“gotoPageByBtn()“ value=“GO“/》《/td》
《td class=“input_li“》每页:
《select id=“p_pageSizeSelect“ onchange=“gotoPage(《%=curIndex%》)“》
《option value=“10“ 《c:if test=“${pageSize==10}“》selected《/c:if》》10条《/option》
《option value=“20“ 《c:if test=“${pageSize==20}“》selected《/c:if》》20条《/option》
《option value=“50“ 《c:if test=“${pageSize==50}“》selected《/c:if》》50条《/option》
《/select》
《/td》
《/tr》
《/table》
控制分页的代码如下
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ taglib uri=“/WEB-INF/tld/fmt.tld“ prefix=“fmt“%》
《%@ taglib tagdir=“/WEB-INF/tags“ prefix=“tags“%》
《head》
《style》《!--分页样式--》
.pager { font: 12px Arial, Helvetica, sans-serif;}
.pager a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px;line-height:30px;vertical-align:middle;}
.pager .active a{color:red;border:none;}
.pager a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.pager a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}
.pager .input_li{padding: 1px 6px;}
《/style》
《script》《!--分页跳转脚本--》
function gotoPage(pageIndex){
var queryForm = document.getElementById(“queryForm“);
var action = queryForm.action;
var pageSize = document.getElementById(“p_pageSizeSelect“).value;
action += “?pageIndex=“ + pageIndex + “&pageSize=“ + pageSize;
//alert(action);
queryForm.action = action;
queryForm.submit();
}
function gotoPageByBtn(){
var pageIndex = document.getElementById(“p_pageIndex“).value;
var pageIndexInt = parseInt(pageIndex);
var totalPage = ${totalPage};
if(pageIndexInt》0 && pageIndexInt《totalPage){
gotoPage(pageIndex);
}
else{
alert(“输入页数超出范围!“);
}
}
《/script》
《/head》
《body》
《form id=“queryForm“ action=“${basePath}/log/list“ method=“post“》
《table》
《tr》
《td》用户名:《/td》
《td》《input type=“text“ name=“userName“ value=“《c:out value=“${userName}“/》“/》《/td》
《td》《input type=“submit“ text=“查询“/》《/td》
《/tr》
《/table》
《/form》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《table class=“border“》
《thead》
《tr》
《th width=“100“》用户名称《/th》
《th width=“500“》操作内容《/th》
《th width=“200“》操作时间《/th》
《/tr》
《/thead》
《tbody》
《c:forEach items=“${logList}“ var=“log“》
《tr》
《td》${log.userName}《/td》
《td》${log.result}《/td》
《td》
《fmt:formatDate value=“${log.createTime}“ pattern=“yyyy-MM-dd HH:mm:ss“/》
《/td》
《/tr》
《/c:forEach》
《/tbody》
《/table》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《/body》
jsp 如何将查询结果实现分页,最好简单易懂…
jsp中分页最快捷的办法是用分页组件:
分页组件代码使用taglib实现的:
《%@ tag language=“java“ pageEncoding=“UTF-8“%》
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ attribute name=“curIndex“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pageSize“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pagerRange“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“totalPage“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“formId“ type=“java.lang.String“ required=“true“%》
《%
long begin = Math.max(1, curIndex - pagerRange/2);
long end = Math.min(begin + (pagerRange-1),totalPage);
request.setAttribute(“p_begin“, begin);
request.setAttribute(“p_end“, end);
%》
《table class=“pager“》
《tr》
《% if (curIndex!=1){%》
《td》《a href=“javascript:gotoPage(1)“》首页《/a》《/td》
《td》《a href=“javascript:gotoPage(《%=curIndex-1%》)“》上一页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“#“》首页《/a》《/td》
《td class=“disabled“》《a href=“#“》上一页《/a》《/td》
《%}%》
《c:forEach var=“i“ begin=“${p_begin}“ end=“${p_end}“》
《c:choose》
《c:when test=“${i == curIndex}“》
《td class=“active“》《a href=“#“》${i}《/a》《/td》
《/c:when》
《c:otherwise》
《td》《a href=“javascript:gotoPage(${i})“》${i}《/a》《/td》
《/c:otherwise》
《/c:choose》
《/c:forEach》
《% if (curIndex!=totalPage){%》
《td》《a href=“#“》下一页《/a》《/td》
《td》《a href=“#“》末页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=curIndex+1%》)“》下一页《/a》《/td》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=totalPage%》)“》末页《/a》《/td》
《%}%》
《td》《a》共${totalPage}页《/a》《/td》
《td class=“input_li“》跳转到:《input type=“text“ id=“p_pageIndex“ size=“2“ value=“《c:out value=“${pageIndex}“/》“/》页 《input type=“button“ id=“gotoBtn“ onclick=“gotoPageByBtn()“ value=“GO“/》《/td》
《td class=“input_li“》 每页:
《select id=“p_pageSizeSelect“ onchange=“gotoPage(《%=curIndex%》)“》
《option value=“10“ 《c:if test=“${pageSize==10}“》selected《/c:if》》10条《/option》
《option value=“20“ 《c:if test=“${pageSize==20}“》selected《/c:if》》20条《/option》
《option value=“50“ 《c:if test=“${pageSize==50}“》selected《/c:if》》50条《/option》
《/select》
《/td》
《/tr》
《/table》
jsp中使用方法:
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ taglib uri=“/WEB-INF/tld/fmt.tld“ prefix=“fmt“%》
《%@ taglib tagdir=“/WEB-INF/tags“ prefix=“tags“%》
《head》
《style》《!--分页样式--》
.pager { font: 12px Arial, Helvetica, sans-serif;}
.pager a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px;line-height:30px;vertical-align:middle;}
.pager .active a{color:red;border:none;}
.pager a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.pager a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}
.pager .input_li{padding: 1px 6px;}
《/style》
《script》《!--分页跳转脚本--》
function gotoPage(pageIndex){
var queryForm = document.getElementById(“queryForm“);
var action = queryForm.action;
var pageSize = document.getElementById(“p_pageSizeSelect“).value;
action += “?pageIndex=“ + pageIndex + “&pageSize=“ + pageSize;
//alert(action);
queryForm.action = action;
queryForm.submit();
}
function gotoPageByBtn(){
var pageIndex = document.getElementById(“p_pageIndex“).value;
var pageIndexInt = parseInt(pageIndex);
var totalPage = ${totalPage};
if(pageIndexInt》0 && pageIndexInt《totalPage){
gotoPage(pageIndex);
}
else{
alert(“输入页数超出范围!“);
}
}
《/script》
《/head》
《body》
《form id=“queryForm“ action=“${basePath}/log/list“ method=“post“》
《table》
《tr》
《td》用户名:《/td》
《td》《input type=“text“ name=“userName“ value=“《c:out value=“${userName}“/》“/》 《/td》
《td》《input type=“submit“ text=“查询“/》《/td》
《/tr》
《/table》
《/form》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《table class=“border“》
《thead》
《tr》
《th width=“100“》用户名称《/th》
《th width=“500“》操作内容《/th》
《th width=“200“》操作时间《/th》
《/tr》
《/thead》
《tbody》
《c:forEach items=“${logList}“ var=“log“》
《tr》
《td》${log.userName}《/td》
《td》${log.result}《/td》
《td》
《fmt:formatDate value=“${log.createTime}“ pattern=“yyyy-MM-dd HH:mm:ss“/》
《/td》
《/tr》
《/c:forEach》
《/tbody》
《/table》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《/body》