Grails 2.3.4 проверка сгенерированных строительных лесов

StackOverflow https://stackoverflow.com//questions/21004137

Вопрос

Я пытаюсь понять, как методы scaffolding, сгенерированные Grails 2.3.4, выполняют проверку.Например, это то, что было сгенерировано для моего метода сохранения домена Club:

def save(Club clubInstance) {
    if (clubInstance == null) {
        notFound()
        return
    }

    if (clubInstance.hasErrors()) {
        respond clubInstance.errors, view:'create'
        return
    }

    clubInstance.save flush:true

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
            redirect clubInstance
        }
        '*' { respond clubInstance, [status: CREATED] }
    }
}

Насколько я понимаю, первый этап проверки произошел при привязке данных к параметру Club clubinstance действия сохранения.Таким образом, любые ошибки привязки данных будут отлавливаться в if (clubInstance.hasErrors()).

Я не вижу явного вызова clubInstance.validate() или какой-либо проверки ошибок в clubInstance.сохранить, как указано в документации.Однако, похоже, это работает.Итак, как этот метод проверяет и возвращает обратно к представлению, если есть нарушения ограничений?

Что еще более важно, не должны ли мы использовать сгенерированные контроллеры scaffolding в качестве наилучшего практического способа выполнения базового CRUD в Grails?

Это было полезно?

Решение

Когда вы включаете параметры в методы действия контроллера, Grails выполнит привязку данных для них.Для простых типов, таких как строки, числа, логическое значение и т.д.имя параметра сопоставляется с именами параметров, и если есть совпадение и разумный способ преобразовать строку параметра в запрашиваемый тип, это сделано за вас.

Для сложных типов параметр обрабатывается как командный объект.Если он определен в классе controller, он становится доступным для проверки во время компиляции с помощью преобразования AST.Если класс определен в другом месте (напримерsrc/groovy) он должен быть снабжен комментариями с grails.validation.Validateable аннотация, и если это класс домена, то он, очевидно, поддается проверке.В любом случае, после создания экземпляра и привязки к данным для вас вызывается функция validate().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top