我有一个搜索网页,用户可以根据一个人的种族过滤搜索结果,作为一个复选框组。有12个'种族'复选框。 params传递给g:paginate,如下所示,以便用户可以翻阅结果并保留在种族复选框中检查的内容:
<g:paginate controller="search" action="list" total="${resultCount}" params="${params}"/>
为链接输出的内容包括每个构建的URL的一堆不必要的数据:
<a href="/myapp/search/list?_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_ethnicity=&_gender=&_gender=&_gender=&accountType=2&ethnicity=1&ethnicity=5&max=3&offset=3" class="step">2</a>
我希望输出分页链接网址,而不会在原始搜索帖子中传回所有额外的_ethnicity变量:
<a href="/myapp/search/list?accountType=2&ethnicity=1&ethnicity=5&max=3&offset=3" class="step">2</a>
如何在没有所有额外不必要的字段的情况下将params放入paginate标签中?功能上它可以工作,但是paginate获取请求的URL太长并且看起来很可怕。
答案 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ðnicity=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}"