- 浏览: 63707 次
- 性别:
- 来自: 上海
最新评论
-
take:
理论上是可以返回个PagedResultList类型对象,里面 ...
GRAILS 分页 查询 -
seanwon:
zcq100 写道你们的商城进展如何了
上线了。。。最近太忙, ...
某商城是怎么炼成的 之kickoff -
zcq100:
你们的商城进展如何了
某商城是怎么炼成的 之kickoff -
seanwon:
eye4sany 写道不觉得有一大段的代码写了两遍吗
上面一段 ...
GRAILS 分页 查询 -
eye4sany:
不觉得有一大段的代码写了两遍吗
GRAILS 分页 查询
在做grails的查询分页的时候,发现一个问题,那就是输入的查询参数不能作为条件在分页之间传递,而且如果做分页查询的总数也不得而知,针对多条件criteria查询(也适用于HQL查询)做了如下实现,代码如下:
最主要的是蓝色标注的部分,创建新的criteria,用projection的rowCount()方法,统计总条数,查询条件要保持一致,然后制定参数传递给view。
def bookingInstance = new Booking(params)
def criteria = Booking.createCriteria()
def max = 5
def offset = 0
if(params.max) max = params.max.toInteger()
if(params.offset) offset = params.offset.toInteger()
def results = criteria {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
maxResults(max)
firstResult(offset)
order('startDateTime', 'asc')
}
}
def criteria1 = Booking.createCriteria()
def branchCount = criteria1.get {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
}
projections {
rowCount()
} }
params.branchCount = branchCount
params.page = 1
println "${branchCount}nnnn"
render(view:'searchresults',model:[ bookingInstanceList: results,params:params ])
view的代码如下:
<g:paginate controller="booking"
action="search" total="${params.branchCount}"
max="5" maxsteps="4" params="${params}" />
主要是指定max,params,total参数,这样就可以在分页查询中传递参数了。
上面一段是演示不分页的,下面一段是演示分页的。。
不过这个方案不是最好的了,看一下SSailYang的回复:
不用这么麻烦。如果你向 list 方法中传递分页信息
Java代码
list(max:x, offset:x) {
// query criteria
} list(max:x, offset:x) {
// query criteria
}
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
我可能方法不对,但是按照你提到的做了,好像没有totalCount这么一个属性。
最主要的是蓝色标注的部分,创建新的criteria,用projection的rowCount()方法,统计总条数,查询条件要保持一致,然后制定参数传递给view。
def bookingInstance = new Booking(params)
def criteria = Booking.createCriteria()
def max = 5
def offset = 0
if(params.max) max = params.max.toInteger()
if(params.offset) offset = params.offset.toInteger()
def results = criteria {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
maxResults(max)
firstResult(offset)
order('startDateTime', 'asc')
}
}
def criteria1 = Booking.createCriteria()
def branchCount = criteria1.get {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
}
projections {
rowCount()
} }
params.branchCount = branchCount
params.page = 1
println "${branchCount}nnnn"
render(view:'searchresults',model:[ bookingInstanceList: results,params:params ])
view的代码如下:
<g:paginate controller="booking"
action="search" total="${params.branchCount}"
max="5" maxsteps="4" params="${params}" />
主要是指定max,params,total参数,这样就可以在分页查询中传递参数了。
评论
7 楼
take
2012-03-08
理论上是可以返回个PagedResultList类型对象,里面可以包含List和count.
但我现在只要返回PagedResultList, 程序就会报错.!
但我现在只要返回PagedResultList, 程序就会报错.!
6 楼
seanwon
2010-08-04
eye4sany 写道
不觉得有一大段的代码写了两遍吗
上面一段是演示不分页的,下面一段是演示分页的。。
不过这个方案不是最好的了,看一下SSailYang的回复:
SSailYang 写道
不用这么麻烦。如果你向 list 方法中传递分页信息
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
list(max:x, offset:x) { // query criteria }
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
5 楼
eye4sany
2010-08-04
不觉得有一大段的代码写了两遍吗
4 楼
java-007
2009-11-05
thanks!
3 楼
seanwon
2009-01-28
我搞明白了,SSailYang您太有才了,这个我找了很多api和参考,竟然没有找到。
如果有相应的参考文档,还请共享。
criteria的list方法,如果指定max:x,offset:y参数,返回的是PageResultList类型,如果不指定,是返回的ArrayList类型。
这太有才了。
如果有相应的参考文档,还请共享。
criteria的list方法,如果指定max:x,offset:y参数,返回的是PageResultList类型,如果不指定,是返回的ArrayList类型。
这太有才了。
2 楼
seanwon
2009-01-28
SSailYang 写道
不用这么麻烦。如果你向 list 方法中传递分页信息
Java代码
list(max:x, offset:x) {
// query criteria
} list(max:x, offset:x) {
// query criteria
}
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
我可能方法不对,但是按照你提到的做了,好像没有totalCount这么一个属性。
1 楼
SSailYang
2009-01-28
不用这么麻烦。如果你向 list 方法中传递分页信息
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
list(max:x, offset:x) { // query criteria }
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
发表评论
-
什么是事务?(2)
2010-08-30 13:32 549待续 -
什么是事务?
2010-08-26 14:05 8271. 什么是事务 2.1 事务 ... -
认识事务 目录
2010-08-20 15:29 6721. 什么是事务... 3 2.1 ... -
JBOSS 4.0.5 EJB3.0之MDB (ACTIVEMQ)
2010-07-26 11:22 2067项目中用到了EJB3.0 MDB,以为很简单的,不想用的 ... -
我怀念的何止是那片土地
2010-05-28 11:49 682六一节快乐! -
存储过程的功过
2009-08-14 14:30 815因为公司有一部分核心业务,涉及到悲观锁处理,为了缩小事务的作用 ... -
事务策略 - (完整版)
2009-08-11 14:57 738最近研读了事务策略方面的文章,颇有心得。 整理了PPT ... -
GigaSpaces 服务虚拟化框架 简单的高性能SOA
2009-07-03 13:44 769........................ -
金融术语
2009-06-22 10:13 12111、咨询轧差(advisory netting): 见状态轧差 ... -
GigaSpaces 改革之路 (Survival Guilde for IT)白皮书的翻译文档
2009-06-20 14:54 1364前言•危机,是由两个 ... -
在高多并发应用内存和硬盘之争
2009-06-07 14:13 778“内存是新的硬盘,硬盘是新的磁带”。实时Web应用不断涌现,达 ... -
云计算涉及的术语和一些概念 整理ing
2009-05-31 09:58 8381、Amazon Web Services - Amazon的 ... -
CIF系统浅析
2009-05-22 10:31 4044背景 目前公司有很多后端的运营支撑系统,主要包括风控/清算/ ... -
XML 基础
2009-04-30 14:39 745经典: 1、属性和元素的区分:元数据(有关数据的数据)应当存储 ... -
GRAILS 1.1 Datasources 多数据源支持
2009-04-24 11:06 1707见附件的PPT教程里面有详细的说明和操作步骤。 环境: g ... -
分享公司内高手文章: TOPLINK 更新的问题
2009-04-01 13:04 773大家在调用toplink的update方法时可能会出现upda ... -
groovy datasource sql 在grails应用中如何处理事务
2009-03-31 18:53 2031特殊的需求,在GRAILS调用GROOVY SQL直接做数据更 ... -
GRAILS belongsTo hasMany 查询问题
2009-03-24 12:03 1358这个bug已经在1.1的正式版本中修复。 举个例子: cla ... -
GRAILS ID GENERATOR 可以自己设置ID字段的值
2009-03-02 17:21 3037这个bug已经在1.1正式版本修复,可以用insert:tru ... -
GRAILS 1.1 的一些问题列表
2009-02-07 13:42 9751、GSQL的eachRow方法会造成StackOverErr ...
相关推荐
供初学者使用,在grails中只有list(自动生成)中有分页实现,而自己新增的页面中需自己实现分页,该文档中描述了如何实现分页以及注意点
简单介绍grails的查询操作,已经类似与hibnatate的查询方式
Grails Grails Grails Grails Grails
Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南
NULL 博文链接:https://niuniufei.iteye.com/blog/2292361
常用的grails的开发的快捷键基本都在里面的 本来应该是免费使用分享,希望得点积分学更多的东西来分享欢迎下载
Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。
8.6 对数据进行分页 8.7 创建自定义标签 8.7.1 创建标签库 8.7.2 自定义标签基础内容 8.7.3 演示自定义标签 8.7.4 测试自定义标签 8.8 本章小结 第9章 ajax 9.1 ajax基础...
Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程
Grails1.1中文文档
grails+Xfire webservice
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入...
grails-2.1.zip.001
详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发
Grails专为下一代JavaWeb应用程序而设计的框架,其借助于Groovy动态语言,使Web开发变得简单而方便。Grails尽量为更多现有的Java项目创建一个全面的框架(不仅局限于视图处理),这和当前一些Java框架提供给用户的一...
Grails 中文 参考手册
grails grails入门经典 grails入门 grails例子 grails资料 通过自学一点点积累起来的,相信对你有帮助的。
Grails 1.3.7英文版官方参考手册,学习Grails的权威指南
grails 中文文档+grails-fckeditor-0.9.5.zip插件