totalCount这个属性是内置的?

7 views
Skip to first unread message

Alex wang

unread,
Nov 6, 2009, 5:09:16 AM11/6/09
to grail...@googlegroups.com
Danny,我按照你说的根据createCriteria的方式,始终无法获得你说的totalCount这个属性,那么在一个普通的搜索查询中同时要考虑到分页,究竟是否可以不要再查询第二次就可以获得totalCount这个值?

我看了一下nabble里的文章,怎么也都是查了两次呢,见这里


Ali Yang

unread,
Nov 6, 2009, 5:18:11 AM11/6/09
to grail...@googlegroups.com
createCriteria().list() 方法实际上返回的是一个 grails.orm.PagedResultList 对象,里面有 totalCount 属性。

2009/11/6 Alex wang <idea...@gmail.com>

Danny,我按照你说的根据createCriteria的方式,始终无法获得你说的totalCount这个属性,那么在一个普通的搜索查询中同时要考虑到分页,究竟是否可以不要再查询第二次就可以获得totalCount这个值?

我看了一下nabble里的文章,怎么也都是查了两次呢,见这里







--
Ali Yang
----------------------------------------
Blog: http://ssailyang.javaeye.com
Twitter: https://twitter.com/aliyang
MSN: yang_...@hotmail.com
QQ: 407131746
----------------------------------------

derekypp peng

unread,
Nov 6, 2009, 5:53:43 AM11/6/09
to grail...@googlegroups.com
我的程式是這樣 你參考看看 有沒有哪裡和你的不太一樣
因為這個方法我已經用了很久了

    def list = { 

        params.max = Math.min(params.max ? params.max.toInteger() : 20,  100)
         def aa = CmParent.createCriteria().list(params){
            if (params.q) {
                or {
                     try{
                         eq "id" ,Long.valueOf(params.q)
                      }catch(e){}
                      like "name", "%"+params.q+"%"
                      ilike "uId", "%"+params.q+"%"
                }

            }
        }

        [cmParentInstanceList: aa, cmParentInstanceTotal: aa.totalCount ]
    }



2009/11/6 Ali Yang <yang...@gmail.com>

Alex wang

unread,
Nov 6, 2009, 6:07:05 AM11/6/09
to grail...@googlegroups.com
终于发现问题是哪里了,原来我用的list方法里没有带params参数!  问题是,比如,我这样写就不对:

def salesChanceInstanceList = SalesChance.createCriteria().list {
eq('updateStatus', 1)
maxResults(params.max)
if (params?.offset) {
firstResult(Integer.valueOf(params?.offset ?: "0"))
}
}

换成 :def salesChanceInstanceList = SalesChance.createCriteria().list(params) {
eq('updateStatus', 1)
}   就对了

我不理解,同样是list方法,带参数就可以,不带参数就不可以,不可理解啊.

2009/11/6 derekypp peng <dere...@gmail.com>

Ali Yang

unread,
Nov 6, 2009, 6:12:35 AM11/6/09
to grail...@googlegroups.com
的确是这样,有参数才有 totalCount。我是很久以前写的程序,所以忘了这一点了。可能是出于这样的考虑,可以将分页信息作为参数,如果没有参数,list 就认为你不需要分页了,也就不需要 totalCount。纯猜的,要想知道正解还要读源码。

2009/11/6 Alex wang <idea...@gmail.com>

终于发现问题是哪里了,原来我用的list方法里没有带params参数!  问题是,比如,我这样写就不对:

def salesChanceInstanceList = SalesChance.createCriteria().list {
eq('updateStatus', 1)
maxResults(params.max)
if (params?.offset) {
firstResult(Integer.valueOf(params?.offset ?: "0"))
}
}

换成 :def salesChanceInstanceList = SalesChance.createCriteria().list(params) {
eq('updateStatus', 1)
}   就对了

我不理解,同样是list方法,带参数就可以,不带参数就不可以,不可理解啊.

derekypp peng

unread,
Nov 6, 2009, 6:34:32 AM11/6/09
to grail...@googlegroups.com
我也不知道這個差別別…只是每次都要做分頁 所以都自然而然的加上了params
看起來Alex也解答我的迷惑了

因為我曾一兩次就怎麼都找不到totalCount 這個屬性
看起來Grails 裡面還是有很多玄妙的地方阿 ~_____~

2009/11/6 Alex wang <idea...@gmail.com>

Alex wang

unread,
Nov 6, 2009, 6:42:14 AM11/6/09
to grail...@googlegroups.com
呵呵,做几个项目就明白了,然后再深入看源码效果就更棒了,兄弟们加油。


2009/11/6 derekypp peng <dere...@gmail.com>

clt

unread,
Nov 6, 2009, 8:09:50 PM11/6/09
to grail...@googlegroups.com
On Fri, 06 Nov 2009 19:42:14 +0800, Alex wang <idea...@gmail.com> wrote:

不带参数的时候 只是把闭包 传给了 list 方法。 list 无从获取 params。

带参数的时候,grails 会把参数组成 map 作为参数在执行闭包的 call
的时候传递给闭包。


> 呵呵,做几个项目就明白了,然后再深入看源码效果就更棒了,兄弟们加油。
>


--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

Alex wang

unread,
Nov 6, 2009, 8:20:26 PM11/6/09
to grail...@googlegroups.com
对于闭包的使用确实是需要花一段时间了解,虽然知道闭包强大,但是真正掌握还觉得有一段时间,我一开始的时候觉得既然同样是list方法,那么无论怎么重载 ,返回的内容应该是一致的,结果还就不一样。




2009/11/7 clt <clt.p...@gmail.com>
Reply all
Reply to author
Forward
0 new messages