문제

명령 객체를 사용하도록 내 컨트롤러 중 일부를 업데이트하고 다른 명령 객체에 대해 PaginateCommand를 확장 할 수있는 도로를 시작했습니다.

class PaginateCommand {
    String sort
    String order
    Integer max
    Integer maxsteps
    Integer offset
    Integer total
}
.

하위 명령 클래스

@Validateable
class MyOtherCommand extends PaginateCommand {
    ...    
}
.

컨트롤러

class SomeController {

    def someService

    def index(MyOtherCommand cmd) {
        someService.loadSomeList(cmd)
        return [cmd: cmd]
    }
}
.

이 모든 것이 훌륭하고 내 컨트롤러가 멋지고 간단합니다. 이제 문제는 페이지약 태그가 나에게 문제를주는 것입니다. 이것은 내가 원래 가정 한 것입니다 :

<g:paginate total="${cmd.total}" params="${cmd.properties}" />
.

그러나 쌍정 태그는 매개 변수 속성에서 전달되지 않은 대부분의 값에 대한 요청에 첨부 된 매개 변수 만 찾습니다. 이 변수를 전체적으로 존재하는 속성으로 수동으로 전달해야합니다.

모든 페이지 매김 변수는 명령 객체 (i 가정)에 바인딩 될 때 요청 매개 변수에서 제거되는 것 같습니다. 요청 객체에 이러한 변수를 유지하므로 요청 매개 변수를 내 서비스에 전달할 필요가 없습니다. 컨트롤러가 렌더링하기 전에 매개 변수를 다시 채우는 데있어 카운터 생산성이 보입니다.

나는 쌍정 태그의 모든 논쟁을 채우거나 누락 된 또 다른 방법이 있지 않아?

<g:paginate total="${cmd.total}" offset="${cmd.offset}" max="${cmd.max}".... /> 
.

p.s. 나는 Grails 2.3.6

를 사용하고 있습니다

도움이 되었습니까?

해결책

고마워 Doerleri.태그는 구현하기에 충분히 간단 할만 큼 간단하지만 쌍정형 태그를 사용하여 끝납니다.일반적으로 3 개의 속성 만 필요합니다 (합계, 최대 및 오프셋)이므로 새로운 사용자 정의 태그를 소개하는 충분한 문제가 아니 었습니다.페이지약 태그의 params 속성은 필터 / 정렬 / etc의 상태를 유지하기 위해 백 요청 매개 변수를 되돌리기 위해 실제로 설계되었으므로 Grails가 태그의 다른 속성을 채우는 것이 사용되지 않는 것이 아니라는 의미가 있다고 가정합니다. Subclass가 요청 매개 변수가 불필요하게 없더라도 컬렉션 및 기타 속성이 있으므로 내 페이지약 명령 클래스를 조정했습니다.이것이 내가 끝내었던 것입니다.

abstract class PaginateCommand {
    String sort
    String order
    Integer max
    Integer maxsteps
    Integer offset
    Integer total

    // Properties needed to maintain pagination state
    abstract Map getFilterParams();

    public Map getPaginateParams() {
        return [sort:sort, order:order] << filterParams
    }
}
.

하위 명령

@Validateable
class MyOtherCommand extends PaginateCommand {    
    String filter1
    String filter2
    List data

    public MyOtherCommand() {
        max = 50
        sort = "id"
        order = "desc"
    }

    Map getFilterParams() {
        [filter1: filter1, filter2: filter2]
    }
    ...
}
.

컨트롤러

def index(MyOtherCommand cmd) {
    someService.loadData(cmd)
    return [cmd: cmd]
}
.

및 gsp

<g:paginate total="${cmd.total}" max="${cmd.max}" maxsteps="${cmd.maxsteps}" offset="${cmd.offset}" params="${cmd.paginateParams}" />
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top