3

コマンドオブジェクトを使用するようにコントローラーの一部を更新しており、他のコマンドオブジェクトを拡張するために 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を使用しています

4

1 に答える 1