Bom essa talvez seja a ultima vez que eu poste nesse topico... pos já estou cansado e cansando principalmente vc's que estão tentando me ajudar... a situação melhorou mais ainda não se concluiu.... vamos lá...
Esta quase tudo funcionando, quando eu deixo o button assim:
<button type="submit" name="_method" value="PUT">Alterar</button>
ele altera os dados do produto mas nao altera a imagem, e redireciona normalmente para a lista de produtos.
se eu coloco na pasta de imagem uma imagem com o id do produto exibe normalmente....
O que mostra que o dowload e o metodo mostra estão ok....
so que se eu cadastro um produto novo e tento colocar uma imagem nao joga para a pasta de jeito algum... :(
Quando eu coloco o button assim
<button type="submit">Alterar</button>
da esse erro aki...
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
root cause
java.lang.NullPointerException
br.com.caelum.goodbuy.imagens.Imagens.salva(Imagens.java:33)
br.com.caelum.goodbuy.controller.ImagensController.upload(ImagensController.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
Eu mudei um pouco a lógica, mais acho que deu no mesmo:
Esse daki é o imagensController
//Tanto faz comentar esse bloco que o resultado é o mesmo... nao esta passando por aki!!!
@Post
@Path("/produtos/{produto.id}/imagem")
public void upload(Produto produto, final UploadedFile imagem) throws IOException{
imagens.upload(imagem, produto);
result.redirectTo(ProdutosController.class).adiciona(produto);
}
Esse daki é o imagens
public void upload(UploadedFile imagem, Produto produto) throws IOException {
File destino = new File(pastaImagens, produto.getId() + ".jpg");
destino.createNewFile();
try {
IOUtils.copy(imagem.getFile(), new FileOutputStream(new File(
pastaImagens, produto.getId() + ".jpg")));
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new FileNotFoundException("Arquivo não encontrado!");
} catch (IOException e) {
e.printStackTrace();
throw new IOException("Não foi possÃvel enviar o arquivo!");
}
System.out.println("Teste para saber se passa por aki!!!");
imagem.getFile().close();
}
E esse daki e o ProdutoController... o altera
//para redirecionar para a lista apos a alteracao, adicionei o /imagem apos o {produto.id}
@Put @Path("/produtos/{produto.id}/imagem")
public void altera(Produto produto) {
dao.altera(produto);
result.redirectTo(ProdutosController.class).lista();
}
e por fim o Form Edita....
<form action="<c:url value="/produtos/${produto.id}/imagem"/>" method="Post" enctype="multipart/form-data">
<fieldset>
<legend>Editar Produto</legend>
<label for ="nome">Nome:</label>
<input id="nome" type="text" name="produto.nome" value="${produto.nome}" />
<label for ="descicao">Descricao:</label>
<textarea id ="descricao" name="produto.descricao">${produto.descricao}</textarea>
<label for ="preco">Preco:</label>
<input id="preco" type="text" name="produto.preco" value="${produto.preco}" />
<img src="<c:url value="/produtos/${produto.id }/imagem"/>" width="100" height="100"></img>
<input type="file" name="imagem" >
<button type="submit" name="_method" value="PUT">Alterar</button>
</fieldset>
</form>