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]
}
}
.
これはすべてうまく機能し、私のコントローラは今素晴らしく、簡単です。今問題はpaginateタグが問題を与えています。これは私が最初に想定されているものです:
<g:paginate total="${cmd.total}" params="${cmd.properties}" />
.
しかしながら、paginateタグはほとんどの値の要求に添付されているパラメータを調べ、params属性で渡されたものではありません。合計のような属性として、これらの変数を手動で渡す必要があります。
すべてのページネーション変数がコマンドオブジェクトにバインドされているときに要求パラメータから削除されるように見えます(iを想定します)。これらの変数をコマンドオブジェクトに保存してくださいので、リクエストパラメータを自分のサービスに渡す必要があります。レンダリングもカウンター生産的に思われる前にコントローラを再検討してください。
私はPaginateタグのすべての引数を取り入れなければならないか、あるいは私が行方不明のもう一つの方法はありますか?
<g:paginate total="${cmd.total}" offset="${cmd.offset}" max="${cmd.max}".... />
.
p.S。私はGrails 2.3.6
を使っています解決
ありがとうDoelleri。タグは実装するのに十分な単純なものですが、Paginateタグを使用して登録されます。通常は3つの属性だけが必要です(合計、最大、およびオフセット)、新しいカスタムタグを導入するのに十分な大きさの問題ではなかった。Paginateタグのparams属性は、フィルタ/ソート/ etcの状態を維持するために要求パラメータを渡すように実際に設計されているため、Grailsがタグ内の他の属性を入力するためにそれを使用しないことを理解させると思います。
サブクラスにリクエストパラメータが不要になっていないコレクションやその他のプロパティがあるため、PAGANINE COMMAND CLUSTを調整しました。これは私が終わったことです。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}" />
.