grails - 将参数传递到grails分页标签的预期方式是什么?

标签 grails params paginate

我正在尝试使用grails分页标记来分页列表。该列表由两个条件控制,一个“名称”字符串和一个“inCirculation” bool(boolean) 值。

这两个值作为searchCriteria映射传递到我的 Controller 的index方法:

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    def searchCriteria = params.searchCriteria?: [inCirculation:"on", name:""]

    def criteria = new DetachedCriteria(Copy)

    if(searchCriteria.inCirculation=="on") {
        criteria = criteria.and {
            eq("inCirculation", true)
        }
    }

    if(!searchCriteria.name.isEmpty()) {
        criteria = criteria.and {
            game {
                like("name", "%${searchCriteria.name}%")
            }
        }
    }

    def results = criteria.list(params)
    respond results, model:[searchCriteria: searchCriteria, copyInstanceList: results, copyInstanceCount: results.totalCount]
}

searchCriteria映射对于确保重复调用index方法获得相同的结果集合至关重要。

显然,分页标记记住搜索标准很重要,这样当用户单击“下一个”链接时,将执行完全相同的搜索,但是会显示结果的第二页。

我假设分页标记的params字段是我必须放置searchCriteria映射的位置,但是,我不知道该怎么做。

我尝试了明显的方法:
<g:paginate params="${[searchCriteria: searchCriteria]}" total="${copyInstanceCount ?: 0}" />

但这似乎将searchCriteria映射转换为字符串:
| Error 2016-10-10 14:52:12,418 [http-bio-8080-exec-10] ERROR errors.GrailsExceptionResolver  - MissingPropertyException occurred when processing request: [GET] /halcon-gaming-library/copy/index
No such property: inCirculation for class: java.lang.String. Stacktrace follows:
Message: No such property: inCirculation for class: java.lang.String
    Line | Method
->>   14 | index     in halcon.gaming.library.CopyController
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    198 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread

我目前正在尝试将字符串重新构成 map ,但是代码变得混乱。这向我表明我做错了事。

带有params的grails paginate标签的正确用法是什么样的?

顺便说一句,我想出的解决方案是:
    if(searchCriteria instanceof String) {
        println searchCriteria
        searchCriteria = groovy.util.Eval.me(searchCriteria
            .replaceAll('\\{', '[')
            .replaceAll('\\}', ']')
            .replaceAll('=', ':')
            .replaceAll(':', ':"')
            .replaceAll(',', '",')
            .replaceAll(']', '"]'))
    }

仅当用户未在名称字段中输入这些字符中的任何一个时,该方法才有效。这似乎很危险。

最佳答案

尝试

<g:paginate params="${params}" total="${copyInstanceCount ?: 0}" />

关于grails - 将参数传递到grails分页标签的预期方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964328/

相关文章:

session - 用户的照片变量并将其存储在 session 中,以便在Grails中的每个页面上访问

ruby-on-rails-3 - 通过 link_to 合并嵌套参数

yii2 - Yii2如何配置全局uploadPath和uploadUrl?

json - Grails-JSON参数请求未传递到 Controller

grails - Grails分页不起作用

grails - 使用迭代gorm查询聚集进行分页

grails - Grails插件的依赖

grails - 从字符串中仅删除一些字符

grails - Grails-创建只读API