Bom estou com um problema em um projeto, estou utilizando Spring + Spring MVC + JPA …
Tenho o seguinte contexto:
class classA {
private String xx;
}
class classB {
private string ccc;
private classA aa;
}
Bom, pelo controller do spring MVC eu passo o objeto classB e uma lista de classA para o form e monto uma combo utilizando a lista de classA com tagLig do Spring,
quando meu controlador vai me devolver o objeto classB montado ele da erro, por que no lugar do objeto classA ele recebe o código do objeto selecionado.
Minha questão é, qual a solução para esse caso utilizando o Spring MVC ? Alguém tem algum exemplo ?
Obs2: “classbobj” é o obj passado do controller para o formulário ModelMap m.addAttribute(“classbobj”, new classB());
Obs1: “listclassA” é uma lista de objetos que foi passada do controller pelo ModelMap m.addAttribute(“listclassA”, daoClassA.getList());
Cara você usa hibernate ? Não estou conseguindo entender direito o que você quer,mas se eu entendi, o correto é você passar assim
<form:select path=“classobj.aa.codigodoobjeto”>
onde o código do objeto seja o id(pk) dele, até pq o combo não te retorna um objeto ele só te retorna um código e através desse código você acessa o objeto.
[quote=MGSAHAO]Cara você usa hibernate ? Não estou conseguindo entender direito o que você quer,mas se eu entendi, o correto é você passar assim
<form:select path=“classobj.aa.codigodoobjeto”>
onde o código do objeto seja o id(pk) dele, até pq o combo não te retorna um objeto ele só te retorna um código e através desse código você acessa o objeto.[/quote]
Então, eu to usando JPA …
Assim, o que ta rolando é o seguinte …
Quando eu submeto o form, o spring ta pegando o o código do objeto que foi selecionado na “combo” e tentando colocar no classB.aa … Só que o classA.aa espera um objeto do tipo classA … Ai o spring da uma exception de type missmatch.
Eu vi uma forma de resolver isso com um “org.springframework.format” você conhece algo ?
Só que cara, você tem um relacionamento entre os dois objetos, que seria uma fk certo ? Quando você for salvar o ClassB ele ele precisa apenas dessa fk da classe A, por isso você tem que por do jeito que eu te falei no path do select.
Que eu tenho que passar para o meu controller o código da fk, para receber no controller o código e buscar o objeto pelo código e setar no objeto que é composto por essa classe …
O que eu gostaria de saber é se o spring não consegue receber esse valor interiro (fk) e fazer a busca e já injetar o obj … Da uma olhadinha nesse tuto … É exatamente meu contexto …
Cara… sinceramente não sei qual a lógica de você querer isso, posta seu model ai para eu ver, você deve ter um joinColum no campo que faz referencia a outra classe, você deve ter mapeado pela fk, quando você submeter esse form o objeto ClasseA ja vai ter o objeto classeB, você não precisa buscar o objeto ja esta “carregado”. Quando você der um classB.getClassA() você vai ter o objeto.
@RequestMapping(value="/Cidade/form", method= RequestMethod.GET)
public String getForm(ModelMap m){
Cidade c = new Cidade();
m.addAttribute("cidade", c);
List<Estado> estados = eDao.findAll();
m.addAttribute("estados", estados);
return"Cidade/form";
}
@RequestMapping(value="/Cidade/set", method= RequestMethod.POST)
@ResponseBody
public String setCidade(@ModelAttribute("cidade") Cidade c){
cDao.save(c);
return "";
}