Pergunta

Estou tentando entender como os métodos de andaime gerados pelo Grails 2.3.4 realizam a validação.Por exemplo, isto é o que foi gerado para o método de salvamento do domínio do meu clube:

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] }
    }
}

Pelo que entendi a primeira fase de validação aconteceu na vinculação dos dados ao parâmetro Club clubinstance da ação save.Portanto, quaisquer erros de ligação de dados serão detectados no if (clubInstance.hasErrors()).

Não vejo nenhuma chamada explícita para clubInstance.validate() ou qualquer verificação de erro em clubInstance.save como sugere a documentação.Parece funcionar, no entanto.Então, como esse método valida e retorna à visualização se houver violações de restrição?

Mais importante ainda, não deveríamos usar os controladores de andaime gerados como a melhor prática para fazer CRUD básico no Grails?

Foi útil?

Solução

Quando você inclui parâmetros nos métodos de ação do controlador, o Grails fará a ligação de dados para eles.Para tipos simples como Strings, números, Boolean, etc.o nome do parâmetro é comparado com os nomes dos parâmetros e se houver uma correspondência e uma maneira sensata de converter a string do parâmetro para o tipo solicitado, isso será feito para você.

Para tipos complexos, o parâmetro é tratado como um objeto de comando.Se for definido na classe do controlador, será validado em tempo de compilação por meio de uma transformação AST.Se a classe estiver definida em outro lugar (por exemplo,src/groovy) deve ser anotado com o grails.validation.Validateable anotação e, se for uma classe de domínio, é obviamente validável.De qualquer forma, depois que a instância for criada e vinculada aos dados, validar() será chamado para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top