Java.lang.IllegalArgumentException: id to load is required for loading [Resolvido]
21 respostas
Guevara
Oi pessoal!!
Tô com um probleminha aqui ao dar um refresh com F5 na página de adicionar fotos, depois que adiciono a foto e dou F5 redireciona para http://localhost:8080/imobiliaria/foto/adiciona e me dá este erro de id:
Rodei em modo debug colocando o breakpoint no método carrega, na primeira vez que dei F5 o id do imóvel carregou e a página tb, na segunda veio null, ou seja, o método não está carregando o imóvel corretamente ou existe algum problema em relação ao refresh.
Lucas_Cavalcanti
vc tah dando um redirect depois de submeter o formulário?
Guevara
Oi lucas!
Tô redirecionando sim, tanto que após a inclusão redireciona para a página de adição de fotos:
@Post@Path("/foto/{imovel.idImovel}/")publicvoidupload(finalUploadedFileimagem,finalImovelimovel,finalFotofoto){//final Long qtd = fotoDAO.getTotalFotos(imovel);validator.checking(newValidations(){{if(that(imagem,is(notNullValue()),"imagem","imagem.nula")){that(imagem.getContentType(),startsWith("image"),"imagem","nao.eh.imagem");}that(!foto.getNome().isEmpty(),"img.nome","imgNome.obrigatorio");}});validator.onErrorUse(Results.logic()).redirectTo(FotoController.class).adiciona(imovel.getIdImovel());imagens.salva(imagem,imovel,foto);// Retornando mensagem de sucesso na inclusãoresult.include("mensagem","Imagem adicionada com sucesso");result.use(Results.logic()).redirectTo(FotoController.class).adiciona(imovel.getIdImovel());}
Parece que ao dar F5 ele perde a id do imóvel quando o método adiciona() é invocado diretamente. É como se eu chamasse o método adiciona no browser, ele perde a id e lança esse erro. =/
Lucas_Cavalcanti
sim, pq vc tah passando via parâmetro do request (query parameter)
coloque um @Path que contenha o id do imovel em algum lugar que vc não vai ter mais esse problema
Guevara
Desculpe Lucas, não entendi, colocar um @Path em que método? No adiciona()?
isso redireciona para a uri do método adiciona do FotoController, passando o parametro…
ou seja, vai mandar um redirect pra /foto/
Guevara
É, o redirecionamento está certo, o que tá pegando é que deu zica ao efetuar o upload, a id do imóvel até aparece na página adiciona() mas ao efetuar o upload a id não é enviada.
Antes do upload:
http://localhost:8080/imobiliaria/foto/59
Após o upload dá o erro 404 e a url fica assim no browser:
http://localhost:8080/imobiliaria/foto//
Acho que a action do form de upload não está pegando a id do imóvel se passar a id assim:
É isso mesmo, ao passar a id daquela forma nada é carregado do imóvel. Tô tentando ainda.
Lucas_Cavalcanti
existe o método imovel.setIdImovel???
debuga dentro do método upload, e vê se o id do imovel vem populado qdo vc envia o upload
Guevara
Método imovel.setidImovel não tenho não. Onde ficaria? =/
Rodei em debug e o método carrega, está mandando os dados pra jsp, mas ela não está recebendo, por isso não faz o upload.
Lucas_Cavalcanti
dentro da classe Imovel, tem o método setIdImovel?
se não tem, crie-o (lembre-se que ele eh um setter)
Guevara
Eu já tinha quando criei os getters e setters da classe Imóvel:
public void setIdImovel(Long idImovel) {
this.idImovel = idImovel;
}
Pensei que fosse outro setter. =)
Lucas_Cavalcanti
então não faz sentido…
se vc chamou a url /…/foto/12/, ele deveria cair na lógica upload, com o imovel.getImagemId() preenchido… e aparentemente isso não tá acontecendo…
tenta debugar isso direitinho e confirmar isso
Guevara
Deu certo, agora ao dar o F5 ele não perde a id, as chamadas aos métodos ficou diferente:
Chamando o método adiciona().