gpt4 book ai didi

Grails 命令对象和分页

转载 作者:行者123 更新时间:2023-12-01 14:37:44 25 4
gpt4 key购买 nike

我一直在更新我的一些 Controller 以使用命令对象,并开始为其他命令对象创建一个 PaginateCommand 以进行扩展。

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

子命令类

@Validateable
class MyOtherCommand extends PaginateCommand {
...
}

Controller

class SomeController {

def someService

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

这一切都很好,我的 Controller 现在很好用也很简单。现在的问题是分页标签给我带来了问题。这是我最初认为可行的方法:

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

然而,paginate 标签只查看附加到大多数值的请求的参数,而不查看通过 params 属性传入的参数。我必须手动传递这些变量作为属性,如上面的总计。

当所有分页变量绑定(bind)到命令对象时,它们似乎都从请求参数中删除(我假设)。我想将这些变量保留在命令对象中,这样我就不必将请求参数传递给我的服务。让 Controller 在渲染之前重新填充参数似乎也会适得其反。

我是不是不得不在分页标签中填充每个参数,还是我遗漏了另一种方法?

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

附言我正在使用 Grails 2.3.6

最佳答案

谢谢 doelleri。该标签很容易实现,但我最终还是按原样使用了 paginate 标签。通常只需要 3 个属性(总计、最大值和偏移量),因此我认为引入新的自定义标记还不是一个大问题。 paginate 标签上的 params 属性实际上是为了传回请求参数以维护过滤器/排序等的状态,所以我认为 Grails 不会使用它来填充标签中的其他属性是有道理的。

我确实最终调整了我的分页命令类,因为该子类具有集合和其他不必要地使请求参数困惑的属性。这就是我最终所做的。

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]
}
...
}

Controller

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}" />

关于Grails 命令对象和分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com