Não consigo atualizar um parâmetro da minha instancia
07/07/2015 16:09
0
Olá pessoal, estou começando com grails e possuo a seguinte dúvida.
possuo a classe aluno que terá uma foto. Criei o controller e as view usando o generate-all do grails.
no meu controlador possuo o método Update que segue abaixo.

class Aluno{
?bytes[] foto
?String nome
?...
}



def update(Aluno alunoInstance){
?def foto = params.imgURL
?alunoInstance.foto = foto.bytes // transformando em bytes para salvar
?if(alunoInstance==null){
?notFound()
?return
?}

?if(!alunoInstance.save(flush:true)){
?alunoInstance.erros.each{
println it
?}
?}
}



É exibido o seguinte erro informando que estou passando uma string "image.jpg", e de alguma forma não atribui os bytes a variável foto de alunoInstance.
se eu fizer println(fotos.bytes) é exibido os números dos bytes

Field error in object 'myapp.Aluno' on field 'foto': rejected value [image.jpg]; codes  [myapp.Aluno.foto.typeMismatch.error,myapp.Aluno.foto.typeMismatch,myapp.Aluno.foto.typeMismatch];
arguments [foto]; default message [For input string: "image.jpg"]
Tags: typeMismatch


0
Olá João,
  Bem vindo ao Grails!!
  Pelo que entendi você está passando para sua controller a URL de uma imagem, certo? nesse caso o atributo "foto" não deveria ser String?
  Se estiver passando mesmo a URL da imagem como parâmetro você está pegando os bytes da string da URL e não da imagem.
07/07/2015 16:22


0
Isso mesmo Dyego, mas quando faço println(params.imgURL) é me retornado outra URL sem ser o caminho da imagem em si.
algo como:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIoAAACKCAYAAAB1h9JkAAAgAElEQVR4nMT9Z1SU5/7/i++z1vntHYHpBVBTdmI09gJMv+97GmBJ7L2X2EvsHUQRVHrvqCAC0hEUG9bYElNMTGJ6Lzs9O92U13kwDI6I+eZ7/uu/zoPPmmEaONfr/tT3dfkPmUxGR/P398ff3x+5XI5cLr/reZlMhqyLP7Iu/ij9ZSj9ZSjaTNbFn4D7/Ai4z6/9NXK/ALQK1R3v9362KsBjsi7+aBVqdCotcr8AlAFytAoVWoUKtUqGTi4jUCanq7+crv4agruoCO6iaLuvRC9TEqjSoldq0AXI0fsrUHf5P6jk/xcqtYLuwQ/htozC0Nf

Eu uso um plugin jquery q faz isso pra mim.
Eu não sei oq seja, já que quando faço alunoInstance.foto = params.imgURL.bytes e mando exibir println(alunoInstance.foto) ele mostra os bytes e tal.

Outra coisa, no meu método create eu consigo salvar a foto da mesma forma, só q ao invés disso eu crio uma instancia e não recebo uma como é no caso do update. Será q tem algo a ver?
def alunoInstance = new Aluno(foto:params.imgURL.bytes, nome:params.nome)
07/07/2015 16:57


0
Como ele rejeita uma String image.jpg se agora estou passando os bytes quando faço alunoInstace.foto = params.imgURL.bytes ?
e quando mando exibir ele mostra q são bytes mesmo e ñ uma String. ñ sei se ele faz essa validação antes deu atribuir ou se não muda nada depois q atribuo.
07/07/2015 17:01


0
Pq usa plugin ??
o grails ja tem isso nativo.
Da uma olha nisso aqui
https://grails.github.io/grails-doc/2.0.x/guide/theWebLayer.html#uploadingFiles

Tem tudo que você precisa.


0
Olá evandro, o plugin jquery é para o usuário renderizar a imagem, um simples upload é tranquilo, mas para fazer isso preciso desse jquery.
valeu o/
10/07/2015 00:26


0
Entendi.
def foto = params.imgURL
alunoInstance.foto = foto.bytes // transformando em bytes para salvar


O erro ta dizendo que vc ta passando uma String com valor "image.jpg" para um tipo  que não é string. Ta falto algo ai para converter em bytes.
tenta
byte[] [code]alunoInstance.foto
=request.getFile(params.imgURL).bytes
[/code]
Talvez ajude esse plugin.
https://grails.org/wiki/Simple%20Avatar%20Uploader


0
Isso, eu faço isso converto para bytes, mas o problema ainda é exibido. Quando dou um print em alunoInstance.foto é mostrado que foi atribuído e me é mostrado os bytes, mas o erro ainda mostra que está sendo uma String "image.jpg". No meu método create ele roda de boa, mas lá eu crio uma nova instancia def alunoInstance = new Aluno(foto:params.imgUrl.bytes, nome:params.nome) e salva tranquilo.
Mas no update pelo pouco que entendo ele já me dá uma instancia com os atributos preenchidos
def update(Aluno alunoInstance) 
ai quando faço alunoInstance.foto = params.imgUrl.bytes ele ainda me diz que estou passando uma string mesmo sendo em bytes.
10/07/2015 11:14



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