2016-10-10 3 views
0

나는 페이지 매김 태그를 사용하여 목록 매김을 시도하고있다. 이 목록은 'name'문자열과 'inCirculation'부울이라는 두 가지 기준에 의해 관리됩니다.grails paginate 태그에 매개 변수를 전달하기위한 의도 된 방법은 무엇입니까?

이 두 값은 searchCriteria 맵으로 내 컨트롤러의 인덱스 메소드에 전달됩니다

def index(Integer max) { 
    params.max = Math.min(max ?: 10, 100) 
    def searchCriteria = params.searchCriteria?: [inCirculation:"on", name:""] 

    def criteria = new DetachedCriteria(Copy) 

    if(searchCriteria.inCirculation=="on") { 
     criteria = criteria.and { 
      eq("inCirculation", true) 
     } 
    } 

    if(!searchCriteria.name.isEmpty()) { 
     criteria = criteria.and { 
      game { 
       like("name", "%${searchCriteria.name}%") 
      } 
     } 
    } 

    def results = criteria.list(params) 
    respond results, model:[searchCriteria: searchCriteria, copyInstanceList: results, copyInstanceCount: results.totalCount] 
} 

searchCriteria지도 확인 결과의 동일한 집합을 얻을 인덱스 메소드에 호출을 반복하는 제작에 매우 중요합니다.

분명히 페이지 매김 태그는 사용자가 '다음'링크를 클릭 할 때 정확히 동일한 검색이 수행되지만 결과의 두 번째 페이지가 표시되도록 검색 기준을 기억하는 것이 중요합니다.

페이지 매김 태그의 params 필드가 searchCriteria 맵을 넣어야하는 곳이라고 가정합니다. 그러나 어떻게 그럴 수 있는지 알 수 없습니다.

<g:paginate params="${[searchCriteria: searchCriteria]}" total="${copyInstanceCount ?: 0}" /> 

하지만 문자열로 searchCriteria 맵을 켜 나타납니다 :

나는 명백한 시도했습니다

| Error 2016-10-10 14:52:12,418 [http-bio-8080-exec-10] ERROR errors.GrailsExceptionResolver - MissingPropertyException occurred when processing request: [GET] /halcon-gaming-library/copy/index 
No such property: inCirculation for class: java.lang.String. Stacktrace follows: 
Message: No such property: inCirculation for class: java.lang.String 
    Line | Method 
->> 14 | index  in halcon.gaming.library.CopyController 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run  in java.lang.Thread 

나는 현재 문자열으로 데리고지도를 재구성하기 위해 노력하고있어 하지만 코드가 복잡해지고 있습니다. 이것은 나에게 뭔가 잘못하고 있음을 암시합니다.

params가있는 grails paginate 태그의 올바른 사용법은 무엇입니까?

Incidently, 내가 해낸 솔루션입니다 : 사용자 이름 필드에 그 모든 문자를 입력하지 않는 경우에만 작동

if(searchCriteria instanceof String) { 
     println searchCriteria 
     searchCriteria = groovy.util.Eval.me(searchCriteria 
      .replaceAll('\\{', '[') 
      .replaceAll('\\}', ']') 
      .replaceAll('=', ':') 
      .replaceAll(':', ':"') 
      .replaceAll(',', '",') 
      .replaceAll(']', '"]')) 
    } 

. 그것은 매우 위험한 것 같습니다.

답변

0

시도

<g:paginate params="${params}" total="${copyInstanceCount ?: 0}" /> 
관련 문제