tira o $ do @Path:
@Get @Path("/admin/{produto.id}/editafoto")
[quote=Lucas Cavalcanti]tira o $ do @Path:
@Get @Path("/admin/{produto.id}/editafoto")
[/quote]
Ok lucas deu certinho.
Agora vamos la
fiz este form.
<form action="<c:url value="/admin/${produto.id}/imagem"/>" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>Editar Produto</legend>
<legend>Upload de Imagem</legend>
<input type="file" name="imagem" />
<button type="submit" name="_method" value="POST">Alterar</button>
Meu controler esta assim:
@Post @Path("/admin/{produto.id}/imagem")
public void upload(Produto produto, final UploadedFile imagem) {
validator.checking(new Validations() {{
if (that(imagem, is(notNullValue()), "imagem", "imagem.nula")) {
that(imagem.getContentType(), startsWith("image"), "imagem", "nao.eh.imagem");
}
}});
validator.onErrorRedirectTo(ProdutosController.class).edita(produto.getId());
imagens.salva(imagem, produto);
result.redirectTo(ProdutosController.class).edita(produto.getId());
}
Deveria funcionar assim nao e?
Mais nao funciona, quando o form a url vem assim:
http://localhost:8080/modular1/admin/7/editafoto
depois que eu pego a imagem e clico em alterar
ele retira o Id do produto e fica assim:
http://localhost:8080/modular1/admin//imagem
E nada acontece.
Alguma luz no fim do tuneo?
rsss
vc precisa incluir um produto no result, pra poder usar ${produto.id} no jsp pra gerar a url
Esse edita foto seu ai ta furado, vc tem que pegar o id do produto, o qual é o mesmo nome da foto, para poder achar a imagem,
tenta assim:
@Get @Path("/produtos/{id}/editaFoto")
public Produto editaFoto(Integer id) {
return dao.busca(id);
}
Desculpa minha ignorância mais como eu faço isso?
Obrigado
assim como o well falou
Lucas mais eu fiz isso
@Post @Path("/admin/{produto.id}/imagem")
public void upload(Produto produto, final UploadedFile imagem) {
validator.checking(new Validations() {{
if (that(imagem, is(notNullValue()), "imagem", "imagem.nula")) {
that(imagem.getContentType(), startsWith("image"), "imagem", "nao.eh.imagem");
}
}});
validator.onErrorRedirectTo(ProdutosController.class).edita(produto.getId());
imagens.salva(imagem, produto);
result.redirectTo(ProdutosController.class).edita(produto.getId());
}
sim, mas no método edita vc precisa fazer um:
result.include("produto", produto);
//ou
return produto;
[quote=Lucas Cavalcanti]sim, mas no método edita vc precisa fazer um:
[code]
result.include(“produto”, produto);
//ou
return produto;
[/code][/quote]
O Metodo edita na produtocontroller certo?
segue o metodo:
@Get @Path("/admin/{id}")
public Produto edita(Long id) {
return dao.carrega(id);
}
Onde eu colocaria este codigo que vc me passou?
Obrigado
bom, isso já deveria funcionar então… a menos que o dao.carrega(id); esteja retornando null
Olha meu Dao
public Produto carrega(Long id) {
return (Produto) this.session.load(Produto.class, id);
}
ele esta retornando o produto nao?
no edita.jsp vc está colocando a url com ${produto.id} e não está indo?
deveria funcionar…
tenta imprimir as outras propriedades do produto e ver se sai alguma coisa…
vc tem o método getId na classe produto?
[quote=Lucas Cavalcanti]no edita.jsp vc está colocando a url com ${produto.id} e não está indo?
deveria funcionar…
tenta imprimir as outras propriedades do produto e ver se sai alguma coisa…
vc tem o método getId na classe produto?[/quote]
eu nao estou usando o arquivo edita.jsp estou usando um formulario so pra por a foto chamado editafoto.jsp
a url esta assim value="/admin/${produto.id}/imagem"
e sim tenho o getId
posta aqui a lógica editafoto()
eu tenho o edita foto la no ProdutoController para chamar o arquivo editafoto
ai quando vou enviar a foto eu uso o:
@Post @Path("/admin/{produto.id}/imagem")
public void upload(Produto produto, final UploadedFile imagem) {
validator.checking(new Validations() {{
if (that(imagem, is(notNullValue()), "imagem", "imagem.nula")) {
that(imagem.getContentType(), startsWith("image"), "imagem", "nao.eh.imagem");
}
}});
validator.onErrorRedirectTo(ProdutosController.class).edita(produto.getId());
imagens.salva(imagem, produto);
result.redirectTo(ProdutosController.class).edita(produto.getId());
result.include("produto", produto);
}
estou fazendo tudo errado ne?
tudo bem… mas cadê o editafoto do ProdutoController?
Ele so esta assim
@Get @Path("/admin/{produto.id}/editafoto")
public void editafoto() {
}
então, a idéia é que vc precisa incluir o produto no result (como eu falei antes), senão vc não consegue chamar ${produto.id} no jsp.
faça isso:
@Get @Path("/admin/{produto.id}/editafoto")
public Produto editafoto(Produto produto) {
return produto;
}
se vc precisar acessar qqer outra propriedade fora o id do produto, use
return dao.carrega(produto.getId());
[quote=Lucas Cavalcanti]então, a idéia é que vc precisa incluir o produto no result (como eu falei antes), senão vc não consegue chamar ${produto.id} no jsp.
faça isso:
@Get @Path("/admin/{produto.id}/editafoto")
public Produto editafoto(Produto produto) {
return produto;
}
se vc precisar acessar qqer outra propriedade fora o id do produto, use
return dao.carrega(produto.getId());
[/quote]
valeu Lucas, pelo eu ainda aprendo este negocio rsss.
a 3 dias nunca havia falar em vraptor e sabia java de ouvir falar hauahuahuahaa. rss
agora ele esta apresentando o seguinte erro:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'imagensController': Unsatisfied dependency expressed through constructor argument with index 3 of type [br.com.caelum.goodbuy.modelo.Produto]: : No matching bean of type [br.com.caelum.goodbuy.modelo.Produto] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.caelum.goodbuy.modelo.Produto] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
não é pra receber o produto no construtor, e sim no método.