Salvar vários registros ao mesmo tempo[RESOLVIDO]

Boa tarde galera, estou com um probleminha aqui que imagino +/- como posso resolver, mas não sei os passo que devo seguir…

É o seguinte tenho um jsp que forma uma lista utlizando taglib, até ai tudo bem, essa lista ela é formada por uma tabela que esta em um form, ele carrega em campos text, o que eu gostaria era fazer tipo um for para salvar cada linha que faço alteração, quando é só um registro faz tranquilo, eu imagino que devo usar a taglib forEach, mas não sei como fazer isso.

Segue o código abaixo do jsp, e da classe controller, a eu estou usando Vraptor.

JSP:

<form action="<c:url value="/endereco/adicionaEndereco"/>"  method="post">
                
                <input id="toolbarsave" class="toolbarsave" type="submit">

                <table class="table">
                    <thead>
                        <tr>
                            <th>Cod.</th>
                            <th>Cidade</th>
                            <th>Endereço</th>
                            <th>Bairro</th>
                            <th>Cep</th>
                            <th>Editar</th>
                            <th>Excluir</th>
                        </tr>
                    </thead>
                    <tbody>
                        <c:forEach items="${enderecoList}" var="endereco" >

                            <tr class="comcor">
                                <td class="tdlinha"><input type="text" id="id" value="${endereco.idend}" name="endereco.idend" size="10">  </td>
                                
                                <td class="tdlinha"><input id="endereco" class="limpar" type="text" value="${endereco.endereco}" name="endereco.endereco" size="40"  maxlength="40">  </td>
                               
                                <td class="tdlinha"> <input id="bairro" class="limpar" type="text" value="${endereco.bairro}" name="endereco.bairro" size="40" maxlength="40" ></td>

                                <td class="tdlinha"><input id="idcidade" class="limpar" type="text" value="${endereco.cidade.idcidade}" name="endereco.cidade.idcidade" size="10" maxlength="10"></td>

                                <td class="tdlinha"><input id="cep" class="limpar" type="text" value="${endereco.cep}" name="endereco.cep" size="10" maxlength="10"></td>            

                              
                            </tr>

                        </c:forEach>


                    </tbody>
                </table>
            </form>

Controller, metodo para salvar

 @Restrito
    @Post
    @Path("/endereco/adicionaEndereco")
    public void adicionaEndereco(Endereco endereco) {
                dao.salva(endereco);
                result.use(Results.page()).forward("/WEB-INF/jsp/endereco/endereco.jsp");
               
    }

salvar vários tudo de uma vez, ou salvar vários um por um?

prefira usar:

result.forwardTo(EnderecoController.class).endereco();
//ou se já estiver no enderecoController
result.forwardTo(this).endereco();

para fazer forwards e redirects

pode ser um por um, ou também tudo de uma vez só, o que você acha melhor?

a respeito do result, eu uso o validade de vraptor, e try cacth e tals, eu tirei só para ficar mais limpo o codigo para postar.

assim esta:

@Restrito
    @Post
    @Path("/endereco/adicionaEndereco")
    public void adicionaEndereco(Endereco endereco) {
        if (endereco.getCidade().getCidade().equals("Nao cadastrada")) {
            validator.add(new ValidationMessage("Cidade informada não é válida", "erro"));
            result.include("tratabotoes", "emedicao");
        } else {
            try {
                dao.salva(endereco);
                validator.add(new ValidationMessage("Salvo com Sucesso", "salvo"));
                result.include("tratabotoes", "existereg");
            } catch (HibernateException e) {
                validator.add(new ValidationMessage("Não Salvo, Erro ao gravar no banco de dados, se persistir o erro, entre em contado com suporte", "erro"));
                result.include("tratabotoes", "emedicao");
            } catch (Exception e) {
                validator.add(new ValidationMessage("Não Salvo, ocorreu um erro inesperado, se persistir o erro, entre em contado com suporte", "erro"));
                result.include("tratabotoes", "emedicao");
            }
        }


        validator.onErrorUse(Results.page()).forward("/WEB-INF/jsp/endereco/enderecoEdit.jsp");

    }

bom, se for pra editar um por um, cria um form por linha.

se for pra todos de uma vez, só vc receber uma List enderecos no controller, e os inputs terem indices:

<c:forEach .... varStatus="s">
   ...
   <input name="enderecos[${s.index}]...."/...

Eu fiz da forma de enviar tudo de uma vez em uma list:

JSP:

     <form action="<c:url value="/endereco/adicionaEndereco"/>"  method="post">
                
                <input id="toolbarsave" class="toolbarsave" type="submit">
...
 <c:forEach items="${enderecoList}" var="endereco" varStatus="s">

                            <tr class="comcor"> 
                                
                                <td class="tdlinha"><input type="text" id="id" value="${endereco.idend}"  name="endereco[${s.index}].idend" size="10">  </td>
                                
                                <td class="tdlinha"><input id="endereco" class="limpar" type="text" value="${endereco.endereco}" name="endereco[${s.index}].endereco" size="40"  maxlength="40">  </td>
                               
                                <td class="tdlinha"> <input id="bairro" class="limpar" type="text" value="${endereco.bairro}" name="endereco[${s.index}].bairro" size="40" maxlength="40" ></td>

                                <td class="tdlinha"><input id="idcidade" class="limpar" type="text" value="${endereco.cidade.idcidade}" name="endereco[${s.index}].cidade.idcidade" size="10" maxlength="10"></td>

                                <td class="tdlinha"><input id="cep" class="limpar" type="text" value="${endereco.cep}" name="endereco[${s.index}].cep" size="10" maxlength="10"></td>            

                              
                            </tr>

                        </c:forEach>
...

Controller:

 @Restrito
    @Post
    @Path("/endereco/adicionaEndereco")
    public void adicionaEndereco(List<Endereco> endereco) {

            try {
                dao.salva(endereco);
                result.forwardTo(EnderecoController.class).endereco(0);
...

DAO:

 public void salva(List<Endereco> endereco) throws HibernateException, Exception {

        Transaction tx = null;

        try {
            tx = session.beginTransaction();
            session.saveOrUpdate(endereco);
            tx.commit();

....

Só aqui no DAO que acho que estou errando, essa é a forma de persistir uma list com hibernate ou como devo fazer, poque esta dando a senguinte exceptiorn:

Unknown entity: java.util.ArrayList

faça um for na lista, e salve endereço por endereço. O hibernate não sabe salvar a coleção inteira.

pode colocar o for dentro da transação

Valeu Lucas, deu certo, obrigado!