renanreismartins 16 de out. de 2012
se vc espera receber mais de um objeto no seu controller
vc deve passar o parametro assim:
produtoEmpresa[0].atributo = valor
abrasss
101574 16 de out. de 2012
Entendi!
Mas como eu faço.rsrs.
Porque assim, estou iniciando em java, e no vraptor.
Então, eu tenho um controller no Vraptor. Que adiciona os produtos.
@Post ( "/produtoEmpresa" )
public void adiciona ( final ProdutoEmpresa produtoEmpresa ) {
dao . salva ( produtoEmpresa );
// Redireciona para a listagem , após a inserção .
result . redirectTo ( this ). lista ();
Como eu faço isso na minha jsp, e aqui no meu controller?
Valeu!!!
101574 16 de out. de 2012
Seguinte,
Eu implementei assim.
& lt ; form action = "<c:url value=" / produtoEmpresa "/>" method = "POST" & gt ;
& lt ; c : forEach items = "${produtoList}" var = "produto" varStatus = "s" & gt ;
& lt ; tr & gt ;
& lt ; td & gt ; & lt ; input type = "checkbox" name = "escolhidos[${s.index}]" & gt ; & lt ; / td & gt ;
/// Outros campos
& lt ; !-- Adicionando o produto a Empresa --& gt ;
& lt ; input type = "hidden" name = "produtoEmpresa.produto2.id"
value = "${produto.id}" /& gt ;
& lt ; input type = "hidden" name = "produtoEmpresa.empresa2.id"
value = "1" /& gt ;
& lt ; / c : forEach & gt ;
& lt ; button type = "submit" & gt ; Adicionar & lt ; / button & gt ;
& lt ; / form & gt ;
Olha o erro que o Hibernate deu.
br . com . caelum . vraptor . http . InvalidParameterException : Exception when trying to instantiate Target ( name = produtoEmpresa , type = class br . com . softsol . compresempre . modelo . ProdutoEmpresa )
java . lang . IllegalStateException : Expecting only one parameter named after Target ( name = preco , type = class java . lang . String ), found instead [ Parameter ( preco -& gt ; 99 ), Parameter ( preco -& gt ; 88 ), Parameter ( preco -& gt ; 77 ), Parameter ( preco -& gt ; 66 ), Parameter ( preco -& gt ; 55 )]
Pelo que eu entendi. O código está passando o preço inúmeras vezes na mesma instância. E eu preciso que isso seja feito um por um.
Como eu faço isso?
Obrigado.
Valeu.
renanreismartins 16 de out. de 2012
o erro não é do hibernate, é pq vc ta passando o atributo de forma errada pro vraptor.
vamos supor que vc quer passar vários objetos ProdutoEmpresa.
entao vc deve fazer o controller receber uma coleção ou uma lista, tipo:
@Post ( "/produtoEmpresa" )
public void adiciona ( List < ProdutoEmpresa > produtoEmpresa ) { ...
e no jsp:
< input type = "hidden" name = "produtoEmpresa[0].atributo"
value = "valor" / >
< input type = "hidden" name = "produtoEmpresa[0].atributo2"
value = "valor" / >
posta sua classe produtoEmpresa caso nao consiga.
abrasss
101574 16 de out. de 2012
Olha o que eu fiz.
& lt ; form action = "<c:url value=" / produtoEmpresa "/>" method = "POST" & gt ;
& lt ; c : forEach items = "${produtoList}" var = "produto" varStatus = "s" & gt ;
& lt ; tr & gt ;
& lt ; td & gt ; & lt ; input type = "checkbox" name = "escolhidos" & gt ; & lt ; / td & gt ;
& lt ; td & gt ; $ { produto . departamento . nome } & lt ; / td & gt ;
& lt ; td & gt ; $ { produto . nome } & lt ; / td & gt ;
& lt ; td & gt ; $ { produto . fabricante } & lt ; / td & gt ;
& lt ; td & gt ; $ { produto . ncm } & lt ; / td & gt ;
& lt ; td & gt ; & lt ; input type = "text" size = "5" name = "produtoEmpresa[${s.index }].preco" value = "${produtoEmpresa.preco}" & gt ; & lt ; / td & gt ;
& lt ; td & gt ; & lt ; input type = "text" size = "5" name = "produtoEmpresa[${s.index }].quantidade_estoque" value = "${produtoEmpresa.quantidade_estoque}" & gt ; & lt ; / td & gt ;
& lt ; td & gt ;
& lt ; label for = "ativo" & gt ; Ativo : & lt ; / label & gt ;
& lt ; input type = "radio" name = "produtoEmpresa[${s.index }].ativo" value = "1" & gt ; Sim & lt ; input type = "radio" name = "produtoEmpresa[${s.index }].ativo" value = "0" & gt ; Não
& lt ; / td & gt ;
& lt ; / tr & gt ;
& lt ; !-- Adicionando o produto a Empresa --& gt ;
& lt ; input type = "hidden" name = "produtoEmpresa[${s.index }].produto2.id"
value = "${produto.id}" /& gt ;
& lt ; input type = "hidden" name = "produtoEmpresa[${s.index }].empresa2.id"
value = "1" /& gt ;
& lt ; / c : forEach & gt ;
& lt ; button type = "submit" & gt ; Adicionar & lt ; / button & gt ;
& lt ; / form & gt ;
No controller.
//Adicionar
@ Post ( "/produtoEmpresa" )
public void adiciona ( final List & lt ; ProdutoEmpresa & gt ; produtoEmpresa ) {
dao . salva ( produtoEmpresa );
//Redireciona para a listagem, após a inserção.
result . redirectTo ( this ). lista ();
}
No meu dao
public void salva(List<ProdutoEmpresa> produtoEmpresa) {
Transaction tx = session.beginTransaction();
session.save(produtoEmpresa);
tx.commit();
}
E deu o erro.
br .com .caelum .vraptor .InterceptionException : exception raised , check root cause for details : org .hibernate .MappingException : Unknown entity : java .util .ArrayList
renanreismartins 16 de out. de 2012
isso, perfeito os parâmetros estão sendo passados corretamente ao vraptor, porém o hibernate não pode salvar uma List diretamente. Vc deve salvar cada objeto separado. Algo como:
public void salva ( List < ProdutoEmpresa > produtoEmpresa ) {
Transaction tx = session .beginTransaction () ;
for ( ProdutoEmpresa prod : produtoEmpresa ) {
session .save ( produtoEmpresa ) ;
}
tx .commit () ;
}