Como fazer para não apagar uma imagem ao alterar o registro?
19/10/2010 00:00
0
Estou com um problema numa aplicação de cadastro de funcionários com fotos.
As fotos são cadastradas corretamente, utilizando o atributo do tipo byte[] que já fornece a opção para upload do arquivo. Fiz uso também de códigos postados no forum para exibir a imagem em vez de números.

O que está ocorrendo é que ao editar, por exemplo, o nome em um registro que possua imagem é necessário carregar novamente o arquivo de imagem, senão ela é apagada.

Como fazer para que isso não ocorra?

Gostaria que ao editar o registro a imagem permanecesse cadastrada, sem alteração e sem a necessidade de carregá-la novamente.

Agradeço a quem puder ajudar.
Tags: Grails


0
Muito provavelmente a action responsável por editar o registro está atualizando todos os atributos da sua classe.
Sugestão: altere apenas os atributos que te interessam. Você pode escrever algo como o código abaixo:


def actionUpdate = {
def registro = Registro.get(params.id)
registro.nome = params.nome
registro.algo = params.algo
// não inclua o atributo referente à imagem
registro.save() // irá editar apenas os campos modificados, mantendo o que não foi alterado.
}


0
Ola kicolobo.

Obrigado pela dica. Funcionou corretamente.

Tentei melhorar fazendo da forma abaixo, para verificar se o conteúdo do endereço da imagem está vazio. Se estiver vazio não altera a imagem mas se eu incluir uma url na imagem para alterar a anterior ele apresenta o erro listado após o código.


cadastroInstance.nome = params.nome

if(!params.imagem.empty){ // a idéia aqui é só alterar a imagem se houver conteúdo no campo
cadastroInstance.imagem = params.imagem
}


erro apresentado:

Error 500: Executing action [update] of controller [web.CadastroController] caused exception: Cannot cast object 'org.springframework.web.multipart.commons.CommonsMultipartFile@4752b854' with class 'org.springframework.web.multipart.commons.CommonsMultipartFile' to class 'java.lang.Number'
Servlet: grails
URI: /UpImagem2/grails/cadastro/update.dispatch
Exception Message: Cannot cast object 'org.springframework.web.multipart.commons.CommonsMultipartFile@4752b854' with class 'org.springframework.web.multipart.commons.CommonsMultipartFile' to class 'java.lang.Number'
Caused by: Cannot cast object 'org.springframework.web.multipart.commons.CommonsMultipartFile@4752b854' with class 'org.springframework.web.multipart.commons.CommonsMultipartFile' to class 'java.lang.Number'


Alguma dica sobre como verificar se a imagem foi ou não alterada e atualizá-la?

Obrigado.
20/10/2010 00:00


0
Oi arisales,

neste caso, o que eu te sugiro é o seguinte: cria uma action só pra editar a imagem e outra pra editar o resto. Assim você não corre este risco.
Neste seu problema, o que tá rolando é que você tá passando um tipo inesperado pra sua classe de domínio.


0
Inclui este código na action update e (aparentemente) está funcionando.

if(!params.imagem.empty){
if( request instanceof MultipartHttpServletRequest ) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest )request;
CommonsMultipartFile file = (CommonsMultipartFile)multiRequest.getFile("imagem");
cadastroInstance.imagem = file.bytes
}
}
22/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