Vraptor - criando listas com jQuery

9 respostas
Fissurado

Ola, to com um problema aqui que ja vi em alguns foruns aeh pela web, mas não consegui solução :confused:

seguinte, tenho uma lista de dependentes e adiciono itens a ela através do jquery:

lista:

<table id="tabelaDeDependentes" style="width: 100%;" border="0" cellpadding="0" cellspacing="0">
							<thead>
								<tr class="ui-widget-header ">
									<td>Código</td>
									<td>Descrição</td>
								</tr>
							</thead>
							<tbody></tbody>
						</table>
<input name="Adicionar" type="button" title="adiciona"
						border="0px" value="Adicionar" id="bt_adiciona" />
jQuery('#bt_adiciona').click(function() {
		var dependente = {
				cep:jQuery("#cepDependente").val(),
				endereco:jQuery("#enderecoDependente").val(),
		};
		jQuery.adicionaDependenteLista(dependente);
	});

jQuery.adicionaDependenteLista = function(dependente) {
	var indice = document.getElementById('tabelaDeDependentes'). rows.length;
	if (dependente != null) {
			jQuery("#tabelaDeDependentes").find('tbody')
			.append(jQuery('<tr>')
					.attr("id", dependente.cep)
					.append(jQuery('<td>')
							.html(dependente.cep).append(
									jQuery('<input></input>')
									.attr("type", "hidden")
									.attr("name", "dependentes[" + indice + "].cep")
									.attr("value", dependente.cep)
							)
					)
					.append(jQuery('<td>')
							.html(dependente.endereco).append(
									jQuery('<input></input>')
									.attr("type", "hidden")
									.attr("name", "dependentes[" + indice + "].endereco")
									.attr("value", dependente.endereco)
							)
					)
					.css("cursor","pointer")
			);

	} else {
		jQuery("#tabelaDeDependentes").find('tbody')
		.append(jQuery('<tr>')
				.append(jQuery("<td colspan='2'>")
						.text("Nenhum dependente encontrado.")
				)
		)
	}
}

Ai vou criando a lista blza, ela fica toda populada la no html. O problema é na hora de submeter…
La no meu Controler ela sempre esta vindo null.

@Post
	@Path("/cliente/cadastro/novo")
	public void novo(Cliente cliente,List<Dependente> dependentes) {
		validator.onErrorUse(Results.page()).of(ClienteController.class).novo();
              ...
              ...

Se alguem puder ajudar, agradeço!

9 Respostas

paulofafism

Como você enviando seu POST?

Lucas_Cavalcanti

os inputs estão sendo criados dentro do form?

habilita o log de debug do vraptor e posta aqui qual é o log dessa request

Fissurado

Opa galera valeu aeh, vamo la

" name="formCliente" method="post">

Lucas Cavalcanti:
os inputs estão sendo criados dentro do form?

habilita o log de debug do vraptor e posta aqui qual é o log dessa request

Sim inputs dentro do form.
Debug:

13:51:18 DEBUG [VRaptor             ] VRaptor received a new request
13:51:18 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
13:51:18 DEBUG [DefaultResourceTranslator] trying to access /cliente/cadastro/novo
13:51:18 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ClienteController.novoClienteController.novo(Cliente, List)]
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
13:51:18 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.estado with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.complemento with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.bairroCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.telefone with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.contaCorrente with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.contaCorrente ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.cidadeCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.enderecoCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.dataCadastro with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.dataCadastro ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.telefone2 with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.sexo with [M]
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.tipoPessoa with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.situacaoSpc with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.situacaoSpc ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.email with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.codigo with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.telefone2 with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.telefone2 ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.rgExpedicao with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.nome with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.nome ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.observacoes with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.observacoes ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.estadoCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.situacaoCheque with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.situacaoCheque ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.validadeCartao with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.validadeCartao ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.tipo with [ ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.tipo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.dataNascimento with []
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.endereco with [teste2]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.endereco ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.cepRefPessoal with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.cepRefPessoal ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.rgcgf with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.sexo with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.sexo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.descricao with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.numero with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.cpfcgc with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.setor with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.setor ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.restricoes with []
13:51:18 DEBUG [OgnlParametersProvider] Applying ramo.codigo with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression ramo.codigo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.outraRenda with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.outraRenda ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.dataAdmissao with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.dataAdmissao ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.bairro with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.bairro ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.cepCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.bairro with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.bairro ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.cidade with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.cidade ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.numero with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.numero ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.nomeFantasia with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.salario with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.salario ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.telefone with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.telefone ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.cidade with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.estado with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.estado ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.nomeEmpresa with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.nomeEmpresa ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.cep with []
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.dataNascimento with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.dataNascimento ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.tipo with [ ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.tipo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.salario with []
13:51:18 DEBUG [OgnlParametersProvider] Applying status.codigo with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression status.codigo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.bairro with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.observacao with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.endereco with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.valorDesconto with []
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.sexo with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.sexo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.telefone with [, , , ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.telefone ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.complementoCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.dataBloqueio with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.cargo with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.cargo ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.adminstradora with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.adminstradora ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.estado with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.estado ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.cep with [700]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.cep ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.email with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.email ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.dataDeAbertura with [, , ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.dataDeAbertura ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.atividadeEconomica with []
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.agencia with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.agencia ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.endereco with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.endereco ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.numeroCobranca with []
13:51:18 DEBUG [OgnlParametersProvider] Applying dependente.complemento with []
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression dependente.complemento ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying referencia.cidade with [, ]
13:51:18 DEBUG [OgnlParametersProvider] cant find property for expression referencia.cidade ignoring
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.dataCadastro with []
13:51:18 DEBUG [OgnlParametersProvider] Applying cliente.tipoPreco with []
13:51:18 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for ClienteController.novo(Cliente, List) as [cliente, dependentes]
13:51:18 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: ClienteController.novoClienteController.novo(Cliente, List)] are [br.com.syspdv.model.Cliente@19d, null]
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
13:51:18 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
13:51:18 DEBUG [ExecuteMethodInterceptor] Invoking ClienteController.novo(Cliente, List)

O formulário é um pouco grande e estou dividindo-o em abas.
No caso desse request adicionei 2 itens na lista e submeti. Mas pelo que percebi minha lista não ta nessa requisição…
Outro detalhe, meu objeto Cliente, que também recebo la no Controller está populando blza, se eu preencher os inputs dele…

Agradeço desde ja a ajuda de vocês.

Lucas_Cavalcanti

ao invés de dar append dos inputs na tabela, faça o apend no form:

jQuery('#id-do-form').append(jQuery('<input></input>')  
                                    .attr("type", "hidden")  
                                    .attr("name", "dependentes[" + indice + "].cep")  
                                    .attr("value", dependente.cep))
Fissurado

Lucas Cavalcanti:
ao invés de dar append dos inputs na tabela, faça o apend no form:

jQuery('#id-do-form').append(jQuery('<input></input>') .attr("type", "hidden") .attr("name", "dependentes[" + indice + "].cep") .attr("value", dependente.cep))

Aeh Lucas deu certo!
Nessa abordagem vou ter que controlar os id’s para caso de deletar itens da lista.
Mas tranquilo, resolveu meu problema. Valeu!

Fissurado

Opa, vou utilizar o tópico p/ tirar outra dúvida da mesma funcionalidade.

Seguinte, fiz como o Lucas indicou: dei um append dos meus hiddens direto no form. Funcionou blza, agora eles são submetidos…

Mas como prescisava mostrar a lista continuo fazendo um append também na tabela como no inicio.
Minha ultima coluna da tabela é a de Ação (deletar)…
nela adicionei o atributo ‘onClick’ e chamei a função que vai deletar a linha da tabela e a div que adiciono ao form que contém meus campos Hiddens.

var indice = document.getElementById('tabelaDeDependentes'). rows.length;
var id =dependente.nome+dependente.tipo+indice;
jQuery("#tabelaDeDependentes").find('tbody')
			.append(jQuery('<tr>')
					.attr("id", id)
					.append(jQuery('<td>')
							.html(dependente.tipo).append(
									jQuery('<input></input>')
									.attr("type", "hidden")
									.attr("name", "dependentes[" + indice + "].tipo")
									.attr("value", dependente.tipo)
							)
					)
					.append(jQuery('<td>')
							.append(jQuery('<input></input>')
									.attr("type", "button")
									.attr("value", "Remover")
									.attr("id","remover")
									.attr('onClick','removeDivComHiddensEdependenteDaTabela('+id+');')
							)
					)
					.css("cursor","pointer")
			);
		
		jQuery('#formCliente').append(jQuery('<div>')    
								.attr("id", "div_"+id)
					 .append(jQuery('<input></input>')    
			                 .attr("type", "hidden")    
			                 .attr("name", "dependentes[" + indice + "].tipo")    
			                 .attr("value", dependente.tipo))

Meu problema é esse ‘id’ que estou passando pra função:

function removeDivComHiddensEdependenteDaTabela(id) {
	jQuery(id).remove();
	var idDaDiv ='#div_'+id;
	console.log(idDaDiv);
	jQuery(idDaDiv).remove();
	return false;
}

Consigo deletar a linha da tabela atravéz do jQuery(id).remove();
Mas quando vou formar o idDaDiv não consigo… :confused:
O console.log(idDaDiv) me retorna isso: #div_[object HTMLTableRowElement]

Sei que ficou um pouco confuso :p, mas se alguem entender e puder ajudar…vai ser massa!
Valeu.

Lucas_Cavalcanti

o problema é que vc não protegeu o id com aspas…

de qqer forma, um jeito melhor do que colocar o atributo onClick é fazer:

jQuery('<td>')  
    .append(jQuery('<input></input>')  
    .attr("type", "button")  
    .attr("value", "Remover")  
    .attr("id","remover")
    .click(function() {
       removeDivComHiddensEdependenteDaTabela(id);
    });

PS: pq vc não usa $ ao invés de jQuery?

Fissurado

Vixxi pode crer oh.
Deu certo com o .click

Cara, to usando ‘jQuery’ porque com o ‘$’ não ta pegando oh…
Deve ser alguma conf que deixei de setar ne?!
é isso então… valeu aeh!!

Lucas_Cavalcanti

o $ não pega se vc estiver com alguma outra biblioteca que usa isso, como a Prototype

Criado 7 de fevereiro de 2011
Ultima resposta 9 de fev. de 2011
Respostas 9
Participantes 3