コマンドオブジェクトを使用するようにコントローラーの一部を更新しており、他のコマンドオブジェクトを拡張するために 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]
}
}
これはすべてうまく機能し、コントローラーは素晴らしくシンプルになりました。現在の問題は、paginate タグが問題を引き起こしていることです。これは私が最初にうまくいくと思っていたものです:
<g:paginate total="${cmd.total}" params="${cmd.properties}" />
ただし、paginate タグは、params 属性で渡されたものではなく、ほとんどの値のリクエストに添付された params のみを調べます。これらの変数は、合計などの属性として手動で渡す必要があります。
すべてのページネーション変数は、コマンド オブジェクトにバインドされると、リクエスト パラメータから削除されるようです (私が推測します)。これらの変数をコマンド オブジェクトに保持したいので、リクエスト パラメータをサービスに渡す必要はありません。レンダリングの前にコントローラーにパラメーターを再設定させることも、逆効果のようです。
paginate タグのすべての引数を入力する必要がありますか、それとも別の方法がありませんか?
<g:paginate total="${cmd.total}" offset="${cmd.offset}" max="${cmd.max}".... />
PS私はGrails 2.3.6を使用しています