Lucas_Cavalcanti 29 de jan. de 2012
o serializable só vai funcionar se vc serializar o objeto e colocar dentro de uma string…
se o que vc só precisa é dos ids do fornecedor e da materiaPrima vc pode fazer o seguinte:
-sobrescreva o toString da PK para retornar os dois ids, por ex separados por vírugla
-crie um converter do vraptor que pega esses dois ids e transforma na pk desejada
robertouba 29 de jan. de 2012
Nesse caso faria um converter de String para MateriaPrimaFornecedorPK
tipo isso?
package br.com.rhfactor.converter ;
import java.util.ResourceBundle ;
import br.com.caelum.vraptor.Convert ;
import br.com.caelum.vraptor.Converter ;
import br.com.rhfactor.quimiflex.entidade.MateriaPrimaFornecedorPK ;
@Convert ( value = MateriaPrimaFornecedorPK . class )
public class MateriaPrimaFornecedorConverter implements Converter & lt ; MateriaPrimaFornecedorPK & gt ;{
@Override
public MateriaPrimaFornecedorPK convert ( String valor , Class & lt ; ? extends MateriaPrimaFornecedorPK & gt ; tipo , ResourceBundle bundle ) {
MateriaPrimaFornecedorPK pk = new MateriaPrimaFornecedorPK ();
String [] ids = valor . split ( "," );
Long fornecedorId = ( Long ) Long . parseLong ( ids [ 0 ] . trim ());
Long materiaPrimaId = ( Long ) Long . parseLong ( ids [ 0 ] . trim ());
pk . getFornecedor (). setId ( fornecedorId );
pk . getMateriaPrima (). setId ( materiaPrimaId );
return pk ;
}
}
Porém, como uso isso?
kkkkkkkkkkkkkkkk
Lucas_Cavalcanti 30 de jan. de 2012
só tem algum campo num formulário ou coisa do tipo:
materiaPrimaFornecedor.id=33,55
robertouba 31 de mar. de 2012
Bom, Estou mesmo sem saber por onde começar!
Criei o Converter:
@ApplicationScoped
@Convert ( value = MateriaPrimaFornecedorPK . class )
public class MateriaPrimaFornecedorConverter implements Converter & lt ; MateriaPrimaFornecedorPK & gt ;{
@Override
public MateriaPrimaFornecedorPK convert ( String valor , Class & lt ; ? extends MateriaPrimaFornecedorPK & gt ; tipo , ResourceBundle bundle ) {
MateriaPrimaFornecedorPK pk = new MateriaPrimaFornecedorPK ();
String [] ids = valor . split ( "," );
Long fornecedorId = ( Long ) Long . parseLong ( ids [ 0 ] . trim ());
Long materiaPrimaId = ( Long ) Long . parseLong ( ids [ 0 ] . trim ());
pk . getFornecedor (). setId ( fornecedorId );
pk . getMateriaPrima (). setId ( materiaPrimaId );
return pk ;
}
}
E na minha classe PK Adicionei o método toString
@ Embeddable
public class MateriaPrimaFornecedorPK implements Serializable {
private static final long serialVersionUID = 504213857862593268 L ;
@ ManyToOne ( optional = false )
private MateriaPrimaFabricante materiaPrima ;
@ ManyToOne ( optional = false )
private Fornecedor fornecedor ;
@ Override
public String toString () {
return this . fornecedor . getId () + "," + this . materiaPrima . getId ();
}
Porém, no meu método no controller
@Post
@Path ( "/fornecedores/produtos/" )
public void adicionarProduto ( MateriaPrimaFornecedor materiaPrimaFornecedor ) {
System . out . println ( materiaPrimaFornecedor . getId ());
}
o valor desse syso é NULL.
Lucas_Cavalcanti 31 de mar. de 2012
como tá o formulário? o @Convert é do VRaptor?
robertouba 31 de mar. de 2012
O formulario está fornecedor.materiaPrimaFornecedor.id pois ha um cascade ai para o fornecedor.
Lucas_Cavalcanti 31 de mar. de 2012
se o parâmetro do controller é materiaPrimaFornecedor, no formulário deveria estar só materiaPrimaFornecedor.id