Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao salvar/update de uma lista

Não cosigo salvar a lista, não consigo identificar o erro, já li tudo tentando a dias resolver isso, vou postar o codigo e a saida do sql gerado eclipse,

itemDao

//ja passei assim tb: public void salvaLista(List<Item> item){    
public void salvaLista(Item item){    
em.merge(item);

}

Controller

@Post
@Path("/itemList/atualizarStatus")
public void atualizarStatus(List<Item> item) {    
for(Item i : item){
// dao.findById(i.getId());
dao.salvaLista(i);
}
result.redirectTo(NotaController.class).lista();

    }

o jsp

form action="<c:url value="/itemList/atualizarStatus"/>" method="POST"> 
            <c:forEach items="${itemList}" var="item">
                <tr>
                    <td><input type="text" name="item.id" value="${item.id}" /></td>
                    <td><input type="text" name="item.nota.id" value="${item.nota.id}" /></td>
                      <td><input type="text" name="item.produto.id" value="${item.produto.id}" /></td>
                    <td><input type="text" name="item.produtoValor" value="${item.produto.valor}" /></td>
                    <td><input type="text" name="item.cor.id" value="${item.cor.id}" /></td>
                    <td><input type="text" name="item.medida.id" value="${item.medida.id}" /></td>
                    <td><input type="text" name="item.quantidade" value="${item.quantidade}" /></td>
                    <td><input type="text" name="item.statusNoSite" value="${item.statusNoSite}" /></td>    
                </tr>
            </c:forEach>
        <button  type="submit">Mudar Status</button>
     </form>

O Html , ta preenchido certinho

<form action="/vraptor-produtos/itemList/atualizarStatus" method="POST"> 

                <tr>
                    <td><input type="text" name="item.id" value="476" /></td>
                    <td><input type="text" name="item.nota.id" value="1" /></td>
                      <td><input type="text" name="item.produto.id" value="1" /></td>
                    <td><input type="text" name="item.produtoValor" value="4.0" /></td>
                    <td><input type="text" name="item.cor.id" value="1" /></td>
                    <td><input type="text" name="item.medida.id" value="3" /></td>
                    <td><input type="text" name="item.quantidade" value="1.0" /></td>
                    <td><input type="text" name="item.statusNoSite" value="false" /></td>    
                </tr>

                <tr>
                    <td><input type="text" name="item.id" value="477" /></td>
                    <td><input type="text" name="item.nota.id" value="1" /></td>
                      <td><input type="text" name="item.produto.id" value="1" /></td>
                    <td><input type="text" name="item.produtoValor" value="4.0" /></td>
                    <td><input type="text" name="item.cor.id" value="2" /></td>
                    <td><input type="text" name="item.medida.id" value="5" /></td>
                    <td><input type="text" name="item.quantidade" value="1.0" /></td>
                    <td><input type="text" name="item.statusNoSite" value="false" /></td>    
                </tr>

        <button  type="submit">Mudar Status</button>
     </form>

Saida do console

Hibernate: 
select
produto0_.id as id1_5_0_,
produto0_.codigoSite as codigoSi2_5_0_,
produto0_.fornecedor_id as forneced7_5_0_,
produto0_.nome as nome3_5_0_,
produto0_.nomeProdutoFornecedor as nomeProd4_5_0_,
produto0_.urlImagem as urlImage5_5_0_,
produto0_.valor as valor6_5_0_ 
from
Produto produto0_ 
where
produto0_.id=?
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate: 
insert 
into
Item
(cor_id, medida_id, nota_id, produto_id, produtoValor, quantidade, statusNoSite) 
values
(?, ?, ?, ?, ?, ?, ?)
08:57:16,778 DEBUG [CDIBasedContainer ] asking cdi to get instance for interface br.com.caelum.vraptor.view.LogicResult
08:57:16,778 DEBUG [CDIBasedContainer ] beans for interface br.com.caelum.vraptor.view.LogicResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultLogicResult] with qualifiers [@Any @Default]]
08:57:16,778 DEBUG [DefaultLogicResult ] redirecting to class NotaController
08:57:16,778 DEBUG [JavassistProxifier ] Class br.com.inteligenteweb.grade.controller.NotaController is proxy: false
08:57:16,780 DEBUG [JavassistProxifier ] a proxy for class br.com.inteligenteweb.grade.controller.NotaController was created as class br.com.inteligenteweb.grade.controller.NotaController_$$jvsted59
08:57:16,780 DEBUG [JavassistProxifier ] Class br.com.inteligenteweb.grade.controller.NotaController is proxy: false
08:57:16,780 DEBUG [DefaultRouter ] Selected route for public java.util.List br.com.inteligenteweb.grade.controller.NotaController.lista() is [FixedMethodStrategy: /nota/lista lista [GET]]
08:57:16,781 DEBUG [DefaultRouter ] Returning URL /nota/lista for [FixedMethodStrategy: /nota/lista lista [GET]]
08:57:16,781 DEBUG [DefaultLogicResult ] redirecting to /vraptor-produtos/nota/lista
08:57:16,781 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
Hibernate: 
update
Item 
set
cor_id=?,
medida_id=?,
nota_id=?,
produto_id=?,
produtoValor=?,
quantidade=?,
statusNoSite=? 
where
id=?
Hibernate: 
update
Item 
set
cor_id=?,
medida_id=?,
nota_id=?,
produto_id=?,
produtoValor=?,
quantidade=?,
statusNoSite=? 
where
id=?
08:57:16,875 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.

Obs. só existem 2 itens na lista, ele faz um insert no BD conforme código com um monte de campos null, muito estranho. Estou a dias tentando resolver, por favor estou com projeto agarrado nisso aqui.

3 respostas
solução!

acho que assim não rola mesmo, acredito que esta lista não está sendo passada preenchida para o controller, tenta assim:

<form action="/vraptor-produtos/itemList/atualizarStatus" method="POST"> 

                <tr>
                    <td><input type="text" name="itens[0].id" value="476" /></td>
                    <td><input type="text" name="itens[0].nota.id" value="1" /></td>
                      <td><input type="text" name="itens[0].produto.id" value="1" /></td>
                    <td><input type="text" name="itens[0].produtoValor" value="4.0" /></td>
                    <td><input type="text" name="itens[0].cor.id" value="1" /></td>
                    <td><input type="text" name="itens[0].medida.id" value="3" /></td>
                    <td><input type="text" name="itens[0].quantidade" value="1.0" /></td>
                    <td><input type="text" name="itens[0].statusNoSite" value="false" /></td>    
                </tr>

                <tr>
                    <td><input type="text" name="itens[1].id" value="477" /></td>
                    <td><input type="text" name="itens[1].nota.id" value="1" /></td>
                      <td><input type="text" name="itens[1].produto.id" value="1" /></td>
                    <td><input type="text" name="itens[1].produtoValor" value="4.0" /></td>
                    <td><input type="text" name="itens[1].cor.id" value="2" /></td>
                    <td><input type="text" name="itens[1].medida.id" value="5" /></td>
                    <td><input type="text" name="itens[1].quantidade" value="1.0" /></td>
                    <td><input type="text" name="itens[1].statusNoSite" value="false" /></td>    
                </tr>

        <button  type="submit">Mudar Status</button>
     </form>

Na tua action:

@Post
@Path("/itemList/atualizarStatus")
public void atualizarStatus(List<Item> itens) {    
for(Item i : itens){
System.out.println("antes de mandar salvar imprime alguma propriedade pra saber se a lista veio preenchida")
//dao.salvaLista(i);
}
//result.redirectTo(NotaController.class).lista();

    }

Não sei nem como te agradecer, obrigado por dispor seu tempo em um dia de Domingo para ajudar. Espero fortalecer meus conhecimentos para poder retribuir a ajuda que me deu. Grato pela atenção!

Deus te abençoe!

Firmeza, precisando estamos ai

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software