私のgrailsアプリは、各ドメインクラスの標準的な動的スキャフォールディングメソッドの多くに対していくつかの追加の動作を定義する必要があります。
コントローラごとに追加する必要のあるメソッドを複製できることはわかっています。実際、それが現在行っていることです。これは、私のカスタムコードが定型的な足場によって隠されていることを意味します。
テンプレートのインポートと変更も試みましたが、コントローラーで静的なスキャフォールディングを生成した場合にのみ、テンプレートが関与しているようです。言うまでもなく、これはあまり役に立ちません。
インターセプターは、アクションに挿入されるのではなく、アクションを囲むため、私が望んでいるものではないようです。なんらかの方法でGORM呼び出しを傍受することを考えましたが、それも私が望んでいることではありません。
私が本当にやりたいのは、基本の動的スキャフォールディングメソッドを、変更できるようにしたい場所にフックがあるメソッドに置き換えることです。
以下は私が達成しようとしていることの例を示しています
// standard "save" dynamic scaffold method decorated with hooks for custom code
def save() {
def ${propertyName} = new ${className}(params)
saveBeforeSave(${propertyName})
if (!${propertyName}.save(flush: true)) {
render(view: "create", model: [${propertyName}: ${propertyName}])
return
}
saveAfterSave(${propertyName})
flash.message = message(code: 'default.created.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), ${propertyName}.id])
redirect(action: "show", id: ${propertyName}.id)
}
// Placeholders hooks to be overridden in controller as necessary
def saveBeforeSave(${propertyName}) {
}
def saveAfterSave(${propertyName}) {
}