Evitar actualização de dados em update
25/10/2010 00:00
0
Estou com o seguinte problema . quando o utilizador actualiza dados de um sócio ele tem de introduzir a data de admissão posterior à data de nascimento. O programa está a compararar as datas direitinho. Isso eu já testei. E devolve uma mensagem de erro a dizer que a data de admissão é anterior à data de nascimento. O problema é que ao mesmo tempo que devolve essa mensagem também actualiza as datas com o valor introduzido. Por exemplo o utilizador introduziu:
data de nascimento: 22-03-1971
data de admissão: 01-06-1966
P programa avisa: "Datas mal introduzida" e redirecciona para a action list com os valores:
data de nascimento: 22-03-1971
data de admissão: 01-06-1966
Se eu tentar redireccionar para a action edit obtenho o mesmo resultado. Tenho o mesmo código na action save e os dados inseridos não são guardados na base de dados. O código é o seguinte:


def update = {
def socioInstance = Socio.get(params.id)
if (socioInstance) {
if (params.version) {
def version = params.version.toLong()
if (socioInstance.version > version) {

socioInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'socio.label', default: 'Socio')] as Object[], "Another user has updated this Socio while you were editing")
render(view: "edit", model: [socioInstance: socioInstance])
return
}
}
socioInstance.properties = params

//data de admissão anterior a data de nascimento
if(socioInstance.dataDeAdmissao.compareTo(socioInstance.dataDeNascimento) < 0){
//socioInstance.refresh()
flash.message = &quot;${message(code&#58; 'default.nascimentoMaiorAdmissao.message', args&#58; [message(code&#58; 'socio.label', default&#58; 'Socio'), socioInstance.id])}&quot;
render(view&#58; &quot;edit&quot;, model&#58; [socioInstance&#58; socioInstance])
}
else if(socioInstance.dataDeAdmissao.compareTo(socioInstance.dataDeNascimento) == 0){
//socioInstance.refresh()
flash.message = &quot;${message(code&#58; 'default.nascimentoIgualAdmissao.message', args&#58; [message(code&#58; 'socio.label', default&#58; 'Socio'), socioInstance.id])}&quot;
render(view&#58; &quot;edit&quot;, model&#58; [socioInstance&#58; socioInstance])
}
else if (!socioInstance.hasErrors() &amp;&amp; socioInstance.save(flush&#58; true)) {
flash.message = &quot;${message(code&#58; 'default.updated.message', args&#58; [message(code&#58; 'socio.label', default&#58; 'Socio'), socioInstance.id])}&quot;
redirect(action&#58; &quot;show&quot;, id&#58; socioInstance.id)
}
else {
render(view&#58; &quot;edit&quot;, model&#58; [socioInstance&#58; socioInstance])
}
}
else {
flash.message = &quot;${message(code&#58; 'default.not.found.message', args&#58; [message(code&#58; 'socio.label', default&#58; 'Socio'), params.id])}&quot;
redirect(action&#58; &quot;list&quot;)
}
}



Não existe maneira de mostrar a mensagem sem guardar os dados?
Tags: Tópicos avançados


0
Oi amrac,

o que tá acontecendo é que você está editando todos os dados da sua instância com o que está vindo do formulário.

repara: quando você digita algo como instancia.properties = params, que é o default do scaffolding, você está fazendo justamente isto.

É só você passar apenas os atributos que quer editar para a instãncia e mandar salvar. Isto vai resolver seu problema.


0
A questão é que se ele introduzir as datas mal eu não quero salvar nada e se ele introduzir as datas bem eu quero salvar tudo. como faço isso?
26/10/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto