Refatorando código de validação em um controller
12/09/2016 12:29
class OperacaoController {
static scaffold = Operacao
OperacaoService operacaoService
(...)
def update() {
Operacao operacaoInstance = Operacao.get(params.id)
bindData(operacaoInstance, params)
// Validação 1
if (params?.dataFimVigencia) {
if(params?.dataInicioVigencia > params?.dataFimVigencia) {
operacaoInstance.errors.rejectValue('', 'dataInicioVigencia.posterior.dataFimVigencia', [
params.dataInicioVigencia] as String[], "")
render(view: 'edit', model: [operacaoInstance: operacaoInstance])
return
}
}
// Validação 2
if (!operacaoInstance) {
flash.message = message(code: 'default.not.found.message', args: [
message(code: '{domainClass.propertyName}.label', default: 'Operacao'),
params.id
])
redirect(action: "list")
return
}
// Validação 3
if (operacaoService.isOperacaoUnique(operacaoInstance)) {
if (operacaoInstance.save(flush: true, failOnError: true)) {
flash.message = message(code: 'default.updated.message', args: [
message(code: '${domainClass.propertyName}.label', default: 'Operacao'),
operacaoInstance.id
])
redirect(action: "edit", id: operacaoInstance.id)
}
} else {
operacaoInstance.errors.rejectValue('', 'default.not.unique.message', [
'Nome', 'Operacao', params.nome] as String[], "")
render(view: 'edit', model: [operacaoInstance: operacaoInstance])
return
}
}
}
class OperacaoController {
static scaffold = Operacao
OperacaoService operacaoService
(...)
def update() {
Operacao operacaoInstance = Operacao.get(params.id)
bindData(operacaoInstance, params)
// Validação 1
validateDataAndRedirectIfIsInvalid(operacaoInstance)
// Validação 2
if (!operacaoInstance) {
flash.message = message(code: 'default.not.found.message', args: [
message(code: '{domainClass.propertyName}.label', default: 'Operacao'),
params.id
])
redirect(action: "list")
return
}
// Validação 3
if (operacaoService.isOperacaoUnique(operacaoInstance)) {
if (operacaoInstance.save(flush: true, failOnError: true)) {
flash.message = message(code: 'default.updated.message', args: [
message(code: '${domainClass.propertyName}.label', default: 'Operacao'),
operacaoInstance.id
])
redirect(action: "edit", id: operacaoInstance.id)
}
} else {
operacaoInstance.errors.rejectValue('', 'default.not.unique.message', [
'Nome', 'Operacao', params.nome] as String[], "")
render(view: 'edit', model: [operacaoInstance: operacaoInstance])
return
}
}
private validateDataAndRedirectIfIsInvalid(Operacao operacaoInstance) {
if (params?.dataFimVigencia) {
if (params?.dataInicioVigencia > params?.dataFimVigencia) {
?operacaoInstance.errors.rejectValue('', 'dataInicioVigencia.posterior.dataFimVigencia', [
params.dataInicioVigencia] as String[], "")
render(view: 'edit', model: [operacaoInstance: operacaoInstance])
return
}
}
}
(...)
}
Para se registrar, clique aqui.