实现查询分页以及隔行变色

在网页的显示中,经常需要用到将查询到的信息显示在页面上,当查询到的信息较多时,需要用到分页查询,将信息分页显示,为了区分每一行,所以要设置一个隔行换色的特效。Hibernate的Query对象提供了分页查询的功能,是setFirstResult和setMaxResults用于设置查询记录的第一条记录和每一也最大记录数,然后使用query.list()方法获取该页相关信息。

下面看具体代码,首先使用Page类封装分页查询的相关信息:

package tool;

import java.util.List;

public class Page {
	private int currentPage;//当前页码
	private int totalSize;//总记录数
	private int totalPage;//总页数
	private boolean hasPrevious;//是否有前一页
	private boolean hasNext;//是否有后一页
	private List list;//存放查询结果集合信息
	//省略set和get方法
}

然后看dao类的具体处理方法

import java.util.List;

import model.Student;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;

import tool.Page;

public class BaseDao {
	private SessionFactory sessionfactory;

	public SessionFactory getSessionfactory() {
		return sessionfactory;
	}

	public void setSessionfactory(SessionFactory sessionfactory) {
		this.sessionfactory = sessionfactory;
	}

	@Transactional
	public Page query(int currentPage,int pageSize){
		Page page = new Page();
		Session session = sessionfactory.getCurrentSession();
		String hql = "FROM Student s order by s.id";
		Query query = session.createQuery(hql);
		List<Student> list = query.list();
		int count = list.size();
		//计算总页数
		int totalpage = (count%pageSize==0)?(count/pageSize):(count/pageSize+1);
		//判断当前页码是否有上下页
		if(currentPage>=totalpage){
			currentPage=totalpage;
			page.setHasNext(false);
		}else{
			page.setHasNext(true);
		}
		if(currentPage <=1){
			currentPage = 1;
			page.setHasPrevious(false);
		}else{
			page.setHasPrevious(true);
		}
		query.setFirstResult((currentPage-1)*pageSize);
		query.setMaxResults(pageSize);
		List<Student> result = query.list();
		page.setCurrentPage(currentPage);
		page.setList(result);
		page.setTotalPage(totalpage);
		page.setTotalSize(count);
		return page;
	}
}

然后就将分页查询的具体信息放到page对象中,然后再Action类中将page对象放到request中并返回到显示界面,然后再显示界面进行相应处理后实现分页显示,具体信息显示页面如下:

<%@ page language="java" import="java.util.*"  pageEncoding="UTF-8"%>
<%@ taglib uri = "/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>查询结果</title>

  </head>

  <body>
   	<div align="center">
   		<s:if test="#request.show.list.size !=0">
   		<table border="1">
   			<tr>
   				<td>id</td>
   				<td>姓名</td>
   			</tr>
   			<s:iterator value="#request.test.list" var="tes">
   				<tr>
   					<td>
   						<s:property value="#tes.id"/>
   					</td>
   					<td>
   						<s:property value="#tes.name"/>
   					</td>
   				</tr>
   			</s:iterator>
   			<tr>
    				<td colspan="2" align="center">
    					<a href="test?page=1">首页</a>|
    					<s:if test="#request.test.hasPrevious">
    						<a href="test?page=<s:property value='#request.test.currentPage-1'/>">
    					上一页</a>
    					</s:if>
    					<s:if test="#request.test.hasNext">
    						|<a href="test?page=<s:property value='#request.test.currentPage+1'/>">
    						下一页</a>
    					</s:if>
    					|<a href="test?page=<s:property value='#request.test.totalPage'/>">
    					末页</a> 
    					第<s:property value="#request.test.currentPage"/>页/
    					共<s:property value="#request.test.totalPage"/>页
    					(<s:property value="#request.test.totalSize"/>条记录)
    				</td>
    			</tr>
   		</table>
   		</s:if>
   	</div>
  </body>
</html>

对于隔行变色可以设置<s:iterator>标签的status属性,判断状态时奇数行还是偶数行。例如:

<s:iterator value="#request.records.list" var="tr" status="status">
    <s:if test="#status.even">
    	<tr bgcolor="yellow">
    </s:if>
    <s:if test="#status.odd">
    	<tr bgcolor="blue">
    </s:if>
    	<td><s:property value="#tr.transaction_date"/></td>
    	<td><s:property value="#tr.expense"/></td>
    	<td><s:property value="#tr.income"/></td>
    	<td><s:property value="#tr.balance"/></td>
    	<td><s:property value="#tr.transaction_type"/></td>
    	<td><s:property value="#tr.remark"/></td>
</tr>
</s:iterator>
时间: 2024-09-30 09:20:56

实现查询分页以及隔行变色的相关文章

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表

我的第一个jQuery插件--表格隔行变色

虽然网上有大量的插件供我们去使用,但不一定有一款适合你的,必要的时候还是要自己动手去敲的.下面,开始我的第一个插件... 参考<锋利的JQuery>,JQuery为开发插件增设了俩个方法:$.extend(object), $.fn.extend(object). 这篇博文对插件制作的讲解挺好的,就是有点长,但值得玩味:http://blog.csdn.net/guorun18/article/details/49819715 下面谈一个我对插件的(片面)理解: 插件分俩种: ·类级别组件开发

表格的一些原生js操作(隔行变色,高亮显示,添加删除,搜索)

看着网上的视频教程,虽说还是有点简单,但还是不免想记录下.这些操作包括(隔行变色,高亮显示,添加删除,搜索功能),而这儿就是涉及table的原有属性“tBodies” “rows” “cells”等几个方法,search方法, split方法等等 效果体验:http://runjs.cn/detail/vm8bz8dl <!doctype html> <html> <head> <meta charset="utf-8"> <tit

用angular实现隔行变色

在写隔行变色时应该知道的几个指令.ng-app :angular入口,ng-repeat:控制重复,ng-cloak:防止闪烁,用法就是给一个class="ng-cloak",在样式表中写好 .ng-cloak{display:none}angular会在解析完代码时清除ng-cloak.还有另外一个防止闪烁的指令只ng-bind.当它作为标签属性时是不会显示出来的比如 <p ng-bind="msg"></p> 这个msg就不会出现闪烁.

Django-rest-framework多条件查询/分页/多表Json

Django-rest-framework多条件查询/分页/多表Json django-rest-framework多条件查询需要覆写ListAPIView.get_queryset方法,代码示例: def get_queryset(self):     """     使用request.query_params实现多条件查询,也可以使用django filter ,较简单的     方法是在filter_fields中指定要过滤的字段,但只能表示等值,不灵活,灵活的方式是

简单的css js控制table隔行变色

(1)用expression 鼠标滑过变色: <style type="text/css"><!-- table { background-color:#000000; cursor:hand; width:100%; }td { onmouseover: expression(onmouseover=function (){this.style.borderColor ='blue';this.style.color='red';this.style.backgro

jquery实现html表格隔行变色

效果图 实现代码: 通过css控制样式,利用jquery的addClass方法实现 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <title> 实现表格隔行变色 </title> 5 <meta h

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

使一个特定的表格隔行变色(引自锋利的jQuery)

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="generator" content="editplus" /> <title>使一个特定的表格隔行变色</title> <script src="jquery-1.7.1.min.js" ty