`
garyli
  • 浏览: 173122 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

grails 查询结果分页 简单实现

阅读更多

我用的是groovy1.5和grails1.03,在使用<g:paginate/>标签的时候发现,不支持查询结果的分页显示,所以做了一些小改动,现在终于实现了。
首先找到<g:paginate/>标签所对应的groovy文件,在grails原文件夹的src\groovy\org\codehaus\groovy\grails\plugins\web\taglib下的RenderTagLib.groovy。
好了,我看了看,不支持查询结果分页的问题找到了,分页的时候没有将查询参数带上。好了,那么我就让它带上吧,于是我在grails-app\taglib\目录下新建了一个

MytagTagLib.groovy,然后将RenderTagLib.groovy的内容全部copy过来,修改paginate方法名为paginate2(以免调用时重叠),在RenderTagLib.groovy中227行的

if(attrs.params) linkParams.putAll(attrs.params)

 修改为

if(attrs.params && attrs.params=="form"){
	linkParams.putAll(params)
}

 由于params中有上次查询过的所有条件,所以将它直接传到后台就可以了。好了,这里&& attrs.params=="form"是我自己加上的以区别默认的查询分页,这样页面上也要做一点小改动

<g:paginate2 total="${flash.varName==null?0:flash.varName}" action="search" params="form"/>

 

好了,参数传递可以解决了,还有一个问题就是total的问题,你应该已经看到了,我在上面用的是flash.varName这个变量来传递total的,来看看我后台处理查询的代码:

def search = {

		def _max = params.max?params.max:10
		def results = Kmfile.findAllByFileNameLikeAndFileTypeLike(
			'%'+params.fileName +'%',
			'%'+params.fileType +'%',
			[max:_max,offset:params.offset]
		)
		flash.varName=Kmfile.countByFileNameLikeAndFileTypeLike(
			"%${params.fileName}%","%${params.fileType}%")		
		//设置显示用select内容
		params.ft_inlist = Kmfile.constraints.fileType.inList;
		render(view:'search',model:[kmfileList:results])

	}

 
countBy*用来计算总数很方便,之后它赋值给flash.varNaem,这样页面上就可以引用了。

好了,这就是我的简单的解决办法,当然默认用get方法传递参数有长度限制,有时间再改进吧!

 

分享到:
评论
5 楼 mccxj 2009-04-24  
不是已经提供个params的属性来添加路径的参数了么?
我对分页带上offset和max才不爽。我把她修改成只带page参数
4 楼 sphinxdwood 2009-04-24  
请问第22行有什么用?params.ft_inlist = Kmfile.constraints.fileType.inList; 
3 楼 garyli 2008-09-17  
再贴一个用createCriteria()实现的分页:
def search = {

		def _max = params.max?params.max:10
		def _offset = params.offset?params.offset:0
		/*
		def results = Kmfile.findAllByFileNameLikeAndFileTypeLike(
			'%'+params.fileName +'%',
			'%'+params.fileType +'%',
			[max:_max,offset:params.offset]
		)
		*/
		def c = Kmfile.createCriteria()
		def results = c {
			like("fileName", "%$params.fileName%")
			like("fileType","%$params.fileType%")
			firstResult(_offset)
			maxResults(_max)
		}

		flash.varName=Kmfile.countByFileNameLikeAndFileTypeLike(
			"%${params.fileName}%","%${params.fileType}%")
		params.ft_inlist = Kmfile.constraints.fileType.inList;
		render(view:'search',model:[kmfileList:results])

	}
2 楼 sword721 2008-09-16  
如果我用createCriteria()来做查询的话怎么做分页处理啊。
1 楼 garyli 2008-09-05  
有需要grails中文帮助文档的可以和我联系。

相关推荐

Global site tag (gtag.js) - Google Analytics