Grails分页标签生成带有最大和偏移参数的链接。例如如何用grails分页标签中的页码替换偏移量和最大值?
/?max=30&offset=0
/?max=30&offset=30
说我们有不断最大等于30
是否有可能使它产生页码呢?
/?page=1
/?page=2
Grails分页标签生成带有最大和偏移参数的链接。例如如何用grails分页标签中的页码替换偏移量和最大值?
/?max=30&offset=0
/?max=30&offset=30
说我们有不断最大等于30
是否有可能使它产生页码呢?
/?page=1
/?page=2
这是我的解决方案
在控制器:
params.max = 30
if(params.long('page')) {
params.offset = (params.long('page') - 1) * params.max
}
在标记库:
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分页标记。期待您的反馈和改进
您可以更改控制器本身。沿线的东西:
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)
....
}
未测试,但应该工作。
[查看标签应该也发生了变化,就像第一个评论。
是的,应在课程 的控制器计算,但问题是关于PAGINATE标签 – Stingkalamar
这里检查源(行号92):https://github.com/grails /grails-core/blob/master/grails-plugin-gsp/src/main/groovy/org/codehaus/groovy/grails/plugins/web/taglib/UrlMappingTagLib.groovy。改变并不难实施。将此用作实现的核心。 –
我同意,这不是很难实现,但我不想重新发明轮子。我正在寻找一些优雅的解决方案,使用现有的grails标签 – Stingkalamar
AFAIK这是不可能的。你可以很轻松地写出你的分页标签,但.. – lukelazarovic