在grails分页中去掉不需要的参数

在grails分页中去掉不需要的参数,grails,Grails,我有一个搜索网页,用户可以通过一个人的种族作为复选框组过滤搜索结果。有12个“种族”复选框。参数按如下方式传递到g:paginate,以便用户可以翻页查看结果并保留在“种族”复选框中选中的内容: <g:paginate controller="search" action="list" total="${resultCount}" params="${params}"/> 链接的输出包括每个构建URL的一组不必要的数据: <a href="/myapp/search/li

我有一个搜索网页,用户可以通过一个人的种族作为复选框组过滤搜索结果。有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>

我希望分页链接URL的输出不包含在原始搜索帖子中传回的所有额外变量:

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

如何在没有所有额外的不必要字段的情况下将参数放入paginate标记中?从功能上讲,它是有效的,但是paginate get请求的URL太长,看起来很可怕。

试试这个

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

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

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

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

对于前一个用户,这可以过滤掉额外的字段,尽管这很难看

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}"

对于前一个用户,这可以过滤掉额外的字段,尽管这很难看

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}"

对于前一个用户,这可以过滤掉额外的字段,尽管这很难看

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}"

对于前一个用户,这可以过滤掉额外的字段,尽管这很难看

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}"