Fala ai galera!
Continuando a minha saga em criar a galeria de imagens, me apareceu mais um erro que não consegui compreender.
As imagens estão sendo salvas na pasta com id do imóvel, nome da foto e nome da imagem upada, mas ao upar me aparece este erro:
java.lang.NullPointerException
br.com.imobiliaria.component.Imagens.salva(Imagens.java:49)
br.com.imobiliaria.controller.FotoController.upload(FotoController.java:52)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
A linha FotoController.upload(FotoController.java:52) se refere a este código:
imagens.salva(imagem,imovel,foto);
O método salva é este:
public void salva(UploadedFile imagem, Imovel imovel, Foto foto ) {
//String uuid = UUID.randomUUID().toString();
File destino = new File(pastaImagens, imovel.getIdImovel() + "." + foto.getNome() + "." + imagem.getFileName());
try {
IOUtils.copyLarge(imagem.getFile(), new FileOutputStream(destino));
foto.setImovel(imovel);
String nome = foto.getNome();
foto.setNome(nome);
String caminho = destino.getAbsolutePath();
foto.setUrlFoto(caminho);
fotoDAO.adiciona(foto,imovel);
} catch (IOException e) {
throw new RuntimeException("Erro ao copiar imagem", e);
}
}
A linha Imagens.salva(Imagens.java:49) se refere a este código:
fotoDAO.adiciona(foto,imovel);
O método adiciona é este:
public void adiciona(Foto foto, Imovel imovel) {
Transaction tx = session.beginTransaction();
session.save(imovel);
session.save(foto);
tx.commit();
}
Não entendo como pode estar salvando os dados na imagem upada na pasta e não salvar estes mesmos dados no banco. =/
Outra coisa que achei muito estranho é que só consigo upar a imagem se colocar a id do imóvel na action do form:
/imovel/${imovel.idImovel}/imagem
O form abaixo não envia a id do imóvel pro Controller num input hidden, deveria enviar já que o nome chega no Controller:
<form action="<c:url value="/foto/upload"/>" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>Upload de Imagem</legend>
<input type="hidden" value="${imovel.idImovel}">
<input type="text" name="foto.nome" />
<input type="file" name="imagem" />
<button type="submit">Enviar</button>
</fieldset>
</form>
Coloquei então um breakpoint em fotoDAO.adiciona(foto,imovel) para ver o que aparecia no debug, o resultado foi este:
Alguém sabe o motivo desses problemas?
Abraço!!