摆脱grails分页中不需要的参数

时间:2013-11-09 13:32:32

标签: grails

我有一个搜索网页,用户可以根据一个人的种族过滤搜索结果,作为一个复选框组。有12个'种族'复选框。 params传递给g:paginate,如下所示,以便用户可以翻阅结果并保留在种族复选框中检查的内容:

<g:paginate controller="search" action="list" total="${resultCount}" params="${params}"/>

为链接输出的内容包括每个构建的URL的一堆不必要的数据:

<a href="/myapp/search/list?_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_ethnicity=&amp;_gender=&amp;_gender=&amp;_gender=&amp;accountType=2&amp;ethnicity=1&amp;ethnicity=5&amp;max=3&amp;offset=3" class="step">2</a>

我希望输出分页链接网址,而不会在原始搜索帖子中传回所有额外的_ethnicity变量:

<a href="/myapp/search/list?accountType=2&amp;ethnicity=1&amp;ethnicity=5&amp;max=3&amp;offset=3" class="step">2</a>

如何在没有所有额外不必要的字段的情况下将params放入paginate标签中?功能上它可以工作,但是paginate获取请求的URL太长并且看起来很可怕。

2 个答案:

答案 0 :(得分:2)

试试这个..,。

<g:paginate controller="search" action="list" total="${resultCount}" params="${params.findAll { it.key == 'ethnicity' && it.value }}"/>

它给你

<a href="/myapp/search/list?ethnicity=1&ethnicity=5" class="step">2</a>

实现目标的一种肮脏方式是

<g:paginate controller="search" action="list" params="${
    params.findAll { a ->
        if (a.value instanceof Collection) {
            def c = a.value.findAll { b ->
                return b
            }
            if (c) {
                return c
            }
        } else {
            return a.value
        }
    }
}"/>

修改

spock99回答比我好多了,还有一个方法是

params="${params.findAll { !it.key.toString().startsWith("_") }}"

答案 1 :(得分:1)

根据以前的用户,这可以过滤掉额外的字段,虽然很难看。

params="${params.findAll { a ->
    if (!a.key.toString().startsWith("_")) {
        return a.value
    }
  }
}"

修改

实际上更简洁的方法是把它放在控制器中:

params.keySet().asList().each { if (it.toString().startsWith("_")) params.remove(it) }

然后在g:paginate你可以坚持

params="${params}"