Grails Paginate标签生成带有max和offset params的链接。实施例
/?max=30&offset=0
/?max=30&offset=30
假设我们的常数最大值等于30。
是否有可能让它生成页码?
/?page=1
/?page=2
答案 0 :(得分:1)
您可以更改控制器本身。类似的东西:
def myMethod() {
params.max = 30
params.offset = (params.max * params.page) - params.max //todo - make sure page is bigger than one :-)
def listOfItemsYouWantToShow = MyPerfectDomainClass.list(params)
....
}
未经测试,但应该有效。
视图标记也应该更改,就像第一条评论一样。
答案 1 :(得分:0)
这是我的解决方案
在控制器中:
params.max = 30
if(params.long('page')) {
params.offset = (params.long('page') - 1) * params.max
}
在标签lib中:
static namespace = "my"
private final static Pattern OFFSET_PATTERN = Pattern.compile("offset=(\\d+)");
def paginate = { attrs, body ->
String str = g.paginate(attrs) // using grails gsp paginate tag
// make sure we delete max param with & (before or after)
str = str.replaceAll(/&max=\d+/, '').replaceAll(/max=\d+&/, '')
while (true) {
Matcher matcher = OFFSET_PATTERN.matcher(str)
if (matcher.find()) {
long pageNum = (matcher.group(1) as long)/params.long('max') + 1
// replace offset=0 with page=1, offset=30 with page=2, etc
str = matcher.replaceFirst('page=' + pageNum)
} else {
break;
}
}
out << str
}
所以我们可以在gsp视图中使用my.paginate,就像我们使用标准grails gsp paginate标签一样。期待您的反馈和改进