2013-11-09 3 views
0

У меня есть поисковая веб-страница, где пользователь может фильтровать результаты поиска по этническому составу человека, в качестве группы флажков. Есть флажки «этнической принадлежности». В PARAMS получить передается в г: постраничная как следующий, так что пользователь может пролистать результаты и сохранить то, что было проверено в этничности флажках:избавиться от нежелательных параметров в граффити pagination

<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, чтобы быть выход без всех дополнительных переменных, которые получают _ethnicity прошли обратно в исходное поиска сообщение:

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

Как я могу получить параметры в теге paginate без лишних лишних полей? Функционально это работает, но URL-адреса для запросов на получение paginate слишком длинны и выглядят отвратительными.

ответ

1

Per предыдущего пользователя, это работает, чтобы отфильтровать дополнительные поля, хотя это некрасиво.

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

EDIT:

На самом деле уборщик способ сделать это в контроллере:

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

Тогда в g:paginate вы можете придерживаться

params="${params}" 
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 
     } 
    } 
}"/> 

EDIT:

spock99 ответ гораздо лучше, чем у меня, еще один способ

params="${params.findAll { !it.key.toString().startsWith("_") }}" 
Смежные вопросы