Informação dos IDs selecionados na datatable (jquery) para o Controller (VRaptor)

3 respostas
A

Problema: usuário seleciona as pessoas na lista, e clica em um botão para adicioná-las a um departamento.

Classes:

Pessoa{Long id,String nome, Departamento departamento}

Departamento{Long id, String descricao, List pessoasDoDepartamento}

Tenho a seguinte tabela na jsp que é gerenciada pelo jquery.datatables, (os dados do tbody estou simulando, pois eles vao vir do controller):

<table
            id="basicTable"
            class="table table-striped table-bordered responsive">
            <thead class="">
              <tr>
                <th>Id:</th>
                <th>Nome:</th>
                <th>Selecionar</th>
              </tr>
            </thead>

            <tbody>
                  <tr>
                      <td>1</td>
                      <td>João</td>
                      <td><input type="checkbox"/></td>
                  </tr>
                  <tr>
                      <td>2</td>
                      <td>Pedro</td>
                      <td><input type="checkbox"/></td>
                  </tr>
                  <tr>
                      <td>3</td>
                      <td>José</td>
                      <td><input type="checkbox"/></td>
                  </tr>
            </tbody>
          </table>

//script
jQuery('#basicTable').DataTable({
            		"sPaginationType": "full_numbers",
            		"aoColumns": [
                 		 null,
                 		 null,
                         {
            		    "mData":null,
            		    "bSortable": false,
            		    "bSearchable": false,
            		    "mRender": function(obj){
                              var html=  '<input type="checkbox"/>';
            		      return html;
            		      }
            		    }
                      ],		             
            		"bProcessing": true,
            		"bServerSide": true,
            		"sAjaxSource": '<c:url value="/bens/json/datatables/paginate"/>',
            		"sServerMethod": "POST"
            	});
Considerações:

1 - criar um controller com escopo de conversação (no meu ver, é necessário para manter os objetos da lista) , onde:

iniciaria a conversação ao listar as pessoas: criando uma lista de pessoas selecionadas;

ao usuário selecionar uma pessoa na tabela, passava o id para um metodo seleciona que adicionaria na lista;

e terminaria  a conversação quando o usuario informasse o departamento, setando em cada pessoa selecionada o departamento e gravando.

2 - De alguma forma passar esse array de id e o id do departamento informado para o controller:

var selectedIds = [];

$(":checked").each(function() {
    selectedIds.push($(this).val());
});

Bom, com base no problema, preciso de algum caminho seja um desses dois que eu coloquei ou outros.

3 Respostas

A

vc não tem ideia de como passar para o servidor o que foi selecionado ?? se for isso vc pode passar tudo usando $.ajax do Jquery ai vem o conceito de ajax e/ou callbacks.

Exemplo:

$.ajax({
  type: "POST", 
  url: "caminho_do_metodo",
  data: { name: "John", location: "Boston" }
})
  .done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
A

Valeu a atenção, demorei pra responder porque estava tentando solucionar, achei uma forma que acredito não ser a melhor, mas segue:

$('#basicTable tbody tr').live('click', function () { 
							var rowData = tabela1.row( this ).data();
                            var idSelecionado = rowData[0];
					        var index = jQuery.inArray(idSelecionado, selected);
					        //jQuery(tabela1).fnSetColumnVis(0, false);
					        if ( index === -1 ) {
					            selected.push( idSelecionado );
					        } else {
					            selected.splice( index, 1 );
					        }
							jQuery( this).toggleClass('row_selected');
							
                            console.log(idSelecionado);
                            console.log(selected);
						});

Sendo assim eu pego os ids e posso ir passando via ajax pro server ou passar todos de uma vez quando o user clicar em algum botão.

Mas se tratando do plugin datatables acredito que tenha alguma solução melhor do que essa que eu usei, fica aberto para outras idéias.

A

Então com esses ids colocados em uma variavel dai vc passa pro server por Ajax, post, get vai da sua necesidade

Criado 24 de novembro de 2014
Ultima resposta 6 de dez. de 2014
Respostas 3
Participantes 2