2013-11-09 2 views
0

사용자의 인종에 따라 검색 결과를 필터링 할 수있는 검색 웹 페이지가 확인란 그룹으로 있습니다. 12 개의 '인종'체크 박스가 있습니다.grails 페이지 매김에서 원하지 않는 매개 변수를 제거하십시오

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

무엇 링크 출력을 얻는 것은 불필요한 데이터의 무리를 포함하는 다음 PARAMS이 g에 전달받을 : 사용자가 결과를 통해 페이지 수와 민족의 체크 박스에 체크 된 것을 보존되도록 다음과 같이 쪽수를 매기다

<a href="/myapp/search/list?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?_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에 대한

추가 불필요한 입력란없이 페이지 매김 태그에 매개 변수를 가져올 수 있습니까? 기능적으로는 작동하지만, 페이지 매김 요청의 URL이 너무 길어서 끔찍한 것처럼 보입니다.

답변

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

시도해보십시오.

spock99 답변입니다 :

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

은 당신이

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

편집이 원하는 것을 달성하기 위해 당신에게

<a href="/myapp/search/list?ethnicity=1&ethnicity=5" class="step">2</a> 
더러운 방법의

하나를 제공합니다 내 것보다 훨씬 낫다.

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