3

私は文字通り、grails から始めたばかりで、いくつかの足場を生成したところです。ここには、すべてのコントローラーで繰り返されるかなり一般的なコードがいくつかあるようです。

  1. get() が成功したかどうかのテスト
  2. 楽観的ロックチェック

これをコントローラーからどのように削除することをお勧めしますか? 理想的には、私はただやりたいです

def personInstance = Person.get(id)

次に、すべてのコントローラーでデフォルトで生成されることを、すべてのコントローラーに対して単一の例外ハンドラーに実行させます。

  def update(Long id, Long version) {
    def personInstance = Person.get(id)
    if (!personInstance) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: 'person.label', default: 'Person'), id])
        redirect(action: "list")
        return
    }

    if (version != null) {
        if (personInstance.version > version) {
            personInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
                      [message(code: 'person.label', default: 'Person')] as Object[],
                      "Another user has updated this Person while you were editing")
            render(view: "edit", model: [personInstance: personInstance])
            return
        }
    }
4

2 に答える 2

2

コントローラーのデフォルトのスキャフォールディングを変更したい場合は、"grails install-templates" コマンドを発行するだけです。src/templates フォルダに大量のファイルが作成されます。その一つが「src/templates/scaffolding/Controller.groovy」です。

次に、「更新」関数を必要な形式に変更し、ドメイン クラス用にもう一度 generate-controller を実行します。

それでも、楽観的/悲観的ロックを本当に使用したくないかどうかを検討する必要があります.

于 2013-02-10T09:12:03.990 に答える
1

A Pattern To Simplify Grails Controllers を見てください。これは、このようなGroovyパターンを提案しています。いい解決策を思いついたら教えてください。私も似たようなことをしようとしています。

于 2013-02-11T08:48:18.120 に答える