Converter lista de objetos em JSON [RESOLVIDO]

22 respostas
P

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();*/
}

22 Respostas

ManoJava

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

P

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

var placass = '${placa}';
				
$( placa ).val(placass);

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...

alexfe

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

P

vc tem alguma dica? para tratar isso?

alexfe

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

P

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

$(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);
					}
					});
				
			});
		});

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

dadosVeiculo.placa

E nem retornar para a function

alexfe

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

P

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)

alexfe

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 ??

P

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…

alexfe

posta sua servlet ai

P

Segue:

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);
		}

	}
alexfe

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

P

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:

var msgRetornoDados = document.getElementById("msgRetornoDados");

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

			alert(msgRetornoDados.value);

		}

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....

alexfe

Nessa linha vc está convertendo para json

joga ele na resposta é uma string :slight_smile:

P

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.

success: function(response)
					{

						$( placa ).val(response);
					}
alexfe

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

P

Não vai… .tinha tentado assim…

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

o valor está como undefined

alexfe

É 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/

P

Não sei nem como te agradecer… muito obrigado alexafe…

Eu coloquei assim:

$.each(JSON.parse(response), function(idx, obj) { $( placas ).val(obj.placa); });

Está correto o valor, só não sei se na lógica assim ficará correto

alexfe

Olha se fosse perto vc poderia me pagar umas cervejas kkkkkkk

P

kkkkk pagaria mesmo… salvou a hora… valeu pela paciência

Criado 5 de dezembro de 2014
Ultima resposta 10 de dez. de 2014
Respostas 22
Participantes 3