Dúvida sobre JSON + vRaptor + preencher lista

Bom dia pessoal,

Estou com uma dúvida sobre vRaptor.

Peguei em um dos tópicos uma forma (creio que feita pelo Lucas) de se puxar uma lista via JSON para um em uma JSP.
A minha intenção é arrumar alguma forma de deixar a opção da cidade do usuário já marcada ao carregar a página (trata-se de uma pagina de edição). Na opção de Estado eu já consegui, Mas não sei como fazer na de cidade.

Eu queria uma forma de verificar o cidade[i].codigo da lista JSON com o usuario.cidade.codigo, para poder adicionar a opção selected no option.

Na minha Classe UsuarioController, eu tenho o seguinte método:

	@Get @Path("/cidade/{uf}")
	public void carregaCidades(Integer uf){
		List<Cidade> cidadeList = cidadeRepository.cidadesPorEstado(uf);
		result.use(Results.json()).from(cidadeList).serialize();
	}	

Gerando uma lista que pode ser pega via JSON.

Na minha JSP, eu tenho o seguinte Javascript:

<script type="text/javascript">
	$(function(){
		$('#uf').change(function(){
			$('#cidade option').remove();
			if ($('#uf').val().length == 0) {
				$('#cidade').attr("disabled", true);			
			}
			else {
				$('#cidade').attr("disabled", false);
				var value = $('#uf').val();
				$.ajax({
	            	url: '<c:url value="/cidade/" />'+ value,
	            	dataType: 'json',
	                success: function(json) {
						var cidade = json.list;
				        for(var i in cidade) {
							var option = $('<option value="' + cidade[i].codigo + '">' + cidade[i].nome + '</option>');
							option.appendTo('#cidade');
				        }
					}
				});
			}
		});
	});
</script>

e Na página, está assim:

  <label for="uf">Estado:</label>
  <select name="uf" id="uf" size="1">
  <option value="">Selecione um estado</option>
  <c:forEach items="${ufList}" var="uf"><option value="${ uf.codigo }" <c:if test="${uf.codigo == usuario.cidade.uf.codigo}">selected="true"</c:if>>${ uf.nome }</option>
  </c:forEach></select>
  
  <label for="cidade">Cidade:</label>
  <select name="cidade" id="cidade" disabled="disabled"></select>

Desde já muito obrigado pessoal! :slight_smile:

<script type="text/javascript"> $(function(){ $('#uf').change(function(){ $('#cidade option').remove(); if ($('#uf').val().length == 0) { $('#cidade').attr("disabled", true); } else { $('#cidade').attr("disabled", false); var value = $('#uf').val(); $.ajax({ url: '<c:url value="/cidade/" />'+ value, dataType: 'json', success: function(json) { var cidade = json.list; for(var i in cidade) { var option = $('<option value="' + cidade[i].codigo + '">' + cidade[i].nome + '</option>'); option.appendTo('#cidade'); } /* ADICIONE ISTO----> */$("#cidade option[value=${usuario.cidade.codigo}]").attr("selected", "selected"); } }); } }); }); </script>

Caramba, uma linhazinha mudou toda história.
Muito obrigado, cara! muito obrigado mesmo!

Agora restam duas pequenas dúvidas:

  1. Meu banco é PostgreSQL, encodado em UTF-8. Tem como ajeitar os resultados que vêm do banco pelo JSON? Os acentos vêm com aquela interrogaçãozinha chata do UTF-8. Eu posso alterar isso aonde?

  2. O meu javascript funciona apenas no onChange do Select, qual o comando pra eu disparar isso quando a pagina for carregada TAMBÉM? Desculpa é que sou muito fraco no javascript =/

Obrigado mais uma vez!

Tente colocar isto no seu web.xml, acho que deve resolver

<context-param> <param-name>br.com.caelum.vraptor.encoding</param-name> <param-value>UTF-8</param-value> </context-param>

[code][/code]

[]s…

ops…

o certo é…

<script> $(window).load(function(){ $('#uf').change(); }); </script>

Mais uma vez, muito obrigado!
Tu salvou meu dia vei :smiley: