0

我有一个搜索网页,用户可以在其中按一个人的种族过滤搜索结果,作为一个复选框组。有 12 个“种族”复选框。参数如下传递到 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 变量的情况下输出分页链接 URL:

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

如何在没有所有额外不必要字段的情况下将参数放入分页标签?在功能上它可以工作,但是分页获取请求的 URL 太长而且看起来很丑陋。

4

2 回答 2

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("_") }}"
于 2013-11-09T13:51:47.207 回答
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}"
于 2013-11-09T19:11:55.183 回答