Моему приложению 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}) {
}