Converter lista de objetos em JSON [RESOLVIDO]

Pessoal

Tenho essa lista no servlet, e queria enviar por JSON, só que não faço ideia como:

for (int i = 0; i < dadosVeiculo.size(); i++) { request.setAttribute("placa", dadosVeiculo.get(i).getPlaca()); /*dadosVeiculo.get(i).getMarca(); dadosVeiculo.get(i).getModelo(); dadosVeiculo.get(i).getAnoFabricacao(); dadosVeiculo.get(i).getAnoModelo(); dadosVeiculo.get(i).getRenavam(); dadosVeiculo.get(i).getCor();*/
}

Da uma lida sobre JSON.parse() que vai resolver esse seu problema.

Tentei seguir os exemplos da documentação, mas não vai valor…

[code]
var placass = ‘${placa}’;

$( placa ).val(placass);[/code]

tentei assim:

var placass = '${placa}'; var obj = jQuery.parseJSON( '{ "placa":placass}'); alert(obj.placa)

Eu uso o inspecionar elemento do Chrome e fica vazio o valor do ‘${placa}’, de ambos os jeitos… mas no servet com system.out.println() o valor ta la…

Vc tem que passar o valor da tela para dentro do javascript, não pode simplesmente escrever a variavel no javascript.

vc tem alguma dica? para tratar isso?

primeiro passo é passar seu dados corretamente para o java script atraves de uma function ?? vc sabe javascript ?

sim… mais ou menos… eu estava treinando ajax (ainda estou)… a comunicação de enviar ta blz… mas de retorno ainda ta zuada…

[code] $(document).ready(function(){

		$("select[name='veiculo']").change(function(){
			var dataVeiculo = {"veiculo": $(this).val(),"loginUsuario":'${loginUsuario}'};	
			var placa = $("input[name='placa']");
			$.ajax({
				type : "POST",
				url: "ServletEditarDados",
				data: dataVeiculo,
				success: function(response)
				{
					$( placa ).val('Carregando...');

					var obj = jQuery.parseJSON( '{ "placa":placass}');

					$( placa ).val(obj.placa);
				}
				});
			
		});
	});[/code]

Tentei passar a lista para Json com a lib GSON (String json = (new Gson).toJson(dadosVeiculo):wink: mas não sei depois como separar por item… tipo:

dadosVeiculo.placa

E nem retornar para a function

A resposta para o ajax é assim

no caso ela virá como retorno dentro da variavel “response” do seu ajax

No caso de vc transformar JSON para objeto vc tem que ter um objeto para a API fazer a conversão de JSON para Objeto, a estrutura do objeto deve ser compativel com o json

Tentei setar assim:

Mas pede para ser INT… tentei json:

e assim:

String json = gson.toJson(dadosVeiculo.get(0).getPlaca()); ServletResponse httpServletResponse = null; httpServletResponse.getWriter().write(json);

Realmente não estou entendendo a alma do negócio… me desculpe a amolação alexafe… mas ta difícil de entrar na cabeça

Ambos os casos da nullponiter em

httpServletResponse.getWriter().write(json)

Os seu dados chegam na servlet ??? corretamente ?

vc não pode setar o objeto para null

o seu httpServletResponse tem que ser o que vem da servlet do seu request, vc tem que trabalhar com a servlet, vc conhecer de servlet ??

no servlet ta beleza…

Eu seto os valores e eles estão lá… se eu deixar no setAttribute, e pegar na jsp ele está lá…

Mas não estou conseguindo neste processo de pegar na function para setar o campo…

posta sua servlet ai

Segue:

[code]protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

	String veiculo = request.getParameter("veiculo");
	String dispositivo = request.getParameter("dispositivo");
	
	PgpmDAO dao = new PgpmDAO();
	HttpSession session = request.getSession();
	String login = (String) session.getAttribute("loginUsuario");
	
	if (!("0".equals(veiculo) || veiculo == null)){
		List<ListaVeiculo> dadosVeiculo = new ArrayList<ListaVeiculo>();
		
		dadosVeiculo = dao.consultaDadosVeiculo(veiculo, login);
		Gson gson = new Gson();
		
		

		String json = gson.toJson(dadosVeiculo);
		
		if(dadosVeiculo != null){
			for (int i = 0; i < dadosVeiculo.size(); i++) {
				request.setAttribute("placas", dadosVeiculo.get(i).getPlaca().toString());
				/*dadosVeiculo.get(i).getMarca();
				dadosVeiculo.get(i).getModelo();
				dadosVeiculo.get(i).getAnoFabricacao();
				dadosVeiculo.get(i).getAnoModelo();
				dadosVeiculo.get(i).getRenavam();
				dadosVeiculo.get(i).getCor();*/
			}

			request.setAttribute("dadosVeiculo", dadosVeiculo);
		} else {
			msgRetornoDados = "Nenhum registro do veículo";
    		request.setAttribute("msgRetornoDados", msgRetornoDados);
    		request.getRequestDispatcher("editarDados.jsp").forward(request, response);	
		}
		
	} else {
		msgRetornoDados = "Selecione um Chassi Válido";
		request.setAttribute("msgRetornoDados", msgRetornoDados);
		request.getRequestDispatcher("editarDados.jsp").forward(request, response);
	}

}[/code]

Vou te atendar a alguns detalhes

Não visualizei o dispositivo sendo enviado por ajax para ser pego na servlet

Outra coisa por exemplo essa linha

request.setAttribute apenas será entendido pelo jsp e não pelo ajax.

e o mais importante por exemplo nesta linha

vc está fazendo o redirecionamento, se vc está esperando o retorno em ajax vc não pode redirecionar senão a resposta é perdida.

após toda essas correções a sua resposta seria assim atraves do response da sua servlet

e a resposta viria na variavel response do seu ajax se não houver nenhuma erro porque vc está esperando a resposta apenas se obter sucess no ajax

O Dispositivo ainda será algo que irei fazer após eu conseguir por chassi, mas por enquanto eu só criei a variável…

O msgRetorno é algo que já tem la´sem ser por ajax, mas para enviar uma mensagem de erro na condição de javascript:

[code] var msgRetornoDados = document.getElementById(“msgRetornoDados”);

	if (msgRetornoDados != null && msgRetornoDados.value != "") {

		alert(msgRetornoDados.value);

	}[/code]

A única coisa de ajax que estou tentando fazer é o retorno dos dados do veículo…

Mas, só uma dúvida alexafe…

Com o response.getWriter().write(“respota valor de retorno aqui”); o que e como eu retornaria?

Pq preciso passar todas aquelas informações do veículo… então como eu passaria para cada item dentro de um só response?

E muito obrigado pelos apontamentos…

Nessa linha vc está convertendo para json

joga ele na resposta é uma string :slight_smile:

no Jsp ele retorna Exatamente assim :

[{“chassi”:“xxxxxx”,“placa”:“123Teste”}]

Os valores estão certos… mas não sei como pegar os valores separados… tipo chassi, placa separados, pois quero setar no campo.

[code]success: function(response)
{

					$( placa ).val(response);
				}[/code]

var objeto = JSON.parse(response); $( placa ).val(objeto.placa);

Não vai… .tinha tentado assim…

alert(response); var objeto = JSON.parse(response); $( placas ).val(objeto.placa);

o valor está como undefined

É por causa das chaves [ e ] , tenta fazer o parse mas antes retirar as chaves [ e ] e se der certo quando tem as chaves tem que ser feito de outra forma porque dai é uma lista de json neste link tem o exemplo

http://www.mkyong.com/jquery/jquery-loop-over-json-string-each-example/