Grails 명령 개체 및 페이지 매김
-
21-12-2019 - |
문제
명령 객체를 사용하도록 내 컨트롤러 중 일부를 업데이트하고 다른 명령 객체에 대해 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}" />
.