java的jsp如何分页显示查询结果呢?
我是个初学java不到1个月的菜鸟,目前遇到了一个分页查询的问题让我百思不得其解。我的查询功能已经完成,由于dao层里的方法都已经写好数据也不多,所以不打算采用真分页,选...
我是个初学java不到1个月的菜鸟,目前遇到了一个分页查询的问题让我百思不得其解。我的查询功能已经完成,由于dao层里的方法都已经写好数据也不多,所以不打算采用真分页,选择假分页。能告诉我jsp页面与servlet怎么写吗,关于查询一共多少个结果的方法我也已经写好,共多少页我也计算好了,就是不知道控制一页显示多少条数据的关键代码是怎么写的,特此求大神教我,小白感激不尽。
展开
7个回答
展开全部
//分页类
public class Pager {
private int pageNow = 1;//
private int pageSize = 7;//
private int totalPage;//
private int totalSize;//
public Pager(int pageNow, int totalSize) {
this.pageNow = pageNow;
this.totalSize = totalSize;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
totalPage = getTotalSize() / getPageSize();
if (totalSize % pageSize != 0)
totalPage++;
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public boolean isHasFirst() {
if (pageNow == 1)
return false;
else
return true;
}
public void setHasFirst(boolean hasFirst) {
}
public boolean isHasPre() {
if (this.isHasFirst())
return true;
else
return false;
}
public void setHasPre(boolean hasPre) {
}
public boolean isHasNext() {
if (isHasLast())
return true;
else
return false;
}
public void setHasNext(boolean hasNext) {
}
public boolean isHasLast() {
if (pageNow == this.getTotalPage())
return false;
else
return true;
}
public void setHasLast(boolean hasLast) {
}
}
//service层
public class PageService {
@SuppressWarnings("unchecked")
public List<?> list(int pageNow, int pageSize, String hql) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
List<Object> objects;
Query query = session.createQuery(hql);
query.setFirstResult(pageSize * (pageNow - 1));
query.setMaxResults(pageSize);
objects = query.list();
tx.commit();
return objects;
}
}
//在action中调用
public String listUser() {
String hql = "from Userinfo u";
if (ps.list(pageNow, pageSize, hql) != null) {
userinfos = (List<Userinfo>) ps.list(pageNow, pageSize, hql);
Map<String, Object> request = (Map<String, Object>) ActionContext
.getContext().get("request");
Pager page = new Pager(this.getPageNow(), us.getUserSize());
request.put("userinfos", userinfos);
request.put("page", page);
return Action.SUCCESS;
} else {
return Action.LOGIN;
}
}
//jsp中
<body>
<table width="832" border="0" cellpadding="0" cellspacing="0" id="listBook">
<tr bgcolor="#E7E7E9">
<td width="5%" height="40"> </td>
<td width="25%" colspan="2" bgcolor="#E7E7E9"><div align="center" class="STYLE10">邮箱</div></td>
<td width="25%" colspan="2" bgcolor="#E7E7E9" class="STYLE1"><div align="center" class="STYLE10">密码</div></td>
<td width="25%" colspan="2" bgcolor="#E7E7E9" class="STYLE1"><div align="center" class="STYLE10">权限</div></td>
<td width="8%" bgcolor="#E7E7E9"><span class="STYLE8"></span></td>
<td width="8%" bgcolor="#E7E7E9"><span class="STYLE8"></span></td>
</tr>
<s:iterator value="#request.userinfos" id="oneUser">
<tr>
<td height="50">
<div align="center">
<input type="checkbox" name="checkbox" value="checkbox" />
</div></td>
<td width="5%"></td>
<td width="23%" class="STYLE4"><s:property
value="#oneUser.email" /></td>
<td width="5%" class="STYLE4"></td>
<td width="23%"><span class="STYLE4"><s:property
value="#oneUser.password" /></span></td>
<td width="5%" class="STYLE4"></td>
<td width="23%"><span class="STYLE4">
<s:if test="#oneUser.power==1">
普通用户
</s:if>
<s:else>
管理员
</s:else>
</span></td>
<td><div align="right" class="STYLE1"><a href='deleteUser?userid=<s:property value="#oneUser.id"/>' class="STYLE5">删除|</a></div></td>
<td class="STYLE1"><a href='lookUser?userid=<s:property value="#oneUser.id"/>&pageNow=<s:property value="#request.page.pageNow"/>' target="_self" class="STYLE5">修改</a></td>
</tr>
</s:iterator>
<tr>
<td colspan="9"><table width="832" border="0" cellspacing="0" bgcolor="#E7E7E9">
<s:set name="page" value="#request.page"></s:set>
<tr>
<td width="70%"> </td>
<s:if test="#page.isHasPre()">
<td width="10%"><a href='listUser?pageNow=<s:property value="#page.pageNow-1"/>' target="_self" class="STYLE3" >上一页</a></td>
</s:if>
<s:else>
<td width="10%"><a href="listUser?pageNow=1" target="_self" class="STYLE3" >上一页</a></td>
</s:else>
<s:if test="#page.isHasNext()">
<td width="10%"><a href="listUser?pageNow=<s:property value="#page.pageNow+1"/>" target="_self" class="STYLE3">下一页</a></td>
</s:if>
<s:else>
<td width="10%"><a href="listUser?pageNow=<s:property value="#page.totalPage"/>" target="_self" class="STYLE3">下一页</a></td>
</s:else>
<td width="10%"><a href="listUser?pageNow=<s:property value="#page.totalPage"/>" target="_self" class="STYLE3">尾页</a></td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
这是采用struts2+hibernate 做的,你可以参考一下
展开全部
分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以写一个pageBean
package cn.oceanlive.pager.domain;
import java.util.List;
public class PageBean<T> {
private int pc;// 当前页码
private int tr;// 总记录数
private int ps;// 每页记录数
private String url;// 基本url(这个你可以不用要,当然要,也可以)
private List<T> beanList;// 当前页记录
public PageBean(int pc, int tr, int ps) {
this.pc = pc;
this.tr = tr;
this.ps = ps;
}
// 返回当前页首行的下标
public int getIndex() {
return (pc - 1) * ps;
}
// 返回总页数
public int getTp() {
int tp = tr / ps;
if (tr % ps != 0)
tp++;
return tp;
}
public PageBean() {
}
public int getPc() {
return pc;
}
public void setPc(int pc) {
this.pc = pc;
}
public int getTr() {
return tr;
}
public void setTr(int tr) {
this.tr = tr;
}
public int getPs() {
return ps;
}
public void setPs(int ps) {
this.ps = ps;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<T> getBeanList() {
return beanList;
}
public void setBeanList(List<T> beanList) {
this.beanList = beanList;
}
}
追问
这个要怎么用啊?
追答
//根据条件查询,pc是当前页
public PageBean<Book> findByCategory(String cid, int pc) {
try {
JdbcUtils.beginTransaction();//开启事物
int tr = bookDao.countByCategory(cid);//获取总记录数
int ps = PageConstants.BOOK_PAGE_SIZE;//获取每页记录数(设置一页显示几个条目)
PageBean<Book> pb = new PageBean<Book>(pc, tr, ps);//创建PageBean
List<Book> bookList = bookDao.findByCategory(cid, pb.getIndex(), ps);//获取本页记录(本页要显示的那几条记录)
pb.setBeanList(bookList);//把本页记录存放到pb中
JdbcUtils.commitTransaction();//提交事物
return pb;//返回pagebean对象(此对象中,包含要显示的List结果集,
//将他放置在session或者是request域中,前台直接获取显示)
} catch(SQLException e) {
try {
JdbcUtils.rollbackTransaction();
} catch (SQLException e1) {
throw new RuntimeException(e1);
}
throw new RuntimeException(e);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
思路是:写个Page类,里面有 总页数,页面容量,当前页;通过页面容量和当前页,就能算出分页查询的起始页和结束页,再写个数据对象继承Page类,把数据对象在jsp和Controller来回传就行了。前端分页可以上网搜插件。kkpager很不错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是在后台一次性查询数据然后再前端分页展示是吧。如果是这样建议你使用Jquery 的插件。jquery的Datetable就可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询