Recuperação de JsonArray em view [RESOLVIDO]

Boa tarde a todos,

pessoal, eu estou com um problema , não consigo recuperar um array do servlet para a view … alguem poderia me ajudar?? muito Obrigado![color=darkred] [/color]

Primeiramente , o Servlet(GET) - (recupero um id da view, e com ele , na chamada de um metodo , varro os arquivos de uma classe… depois os armazeno em um json e depois num JsonArray,
O PROBLEMA É QUANDO TENTO RESGATAR OS DADOS USANDO O METODO $.getJSON()…)

    É PASSADO O SEGUINTE ERRO... (NA PAGINA)  

“NetworkError: 404 Not Found - http://localhost:8080/uploader1/..js/jquery-1.9.1-min.js” jquery…-min.js

“NetworkError: 404 Not Found - http://localhost:8080/uploader1/..js/jquery-1.9.1-min.js” jquery…-min.js

O método getAttributeNode() não deve mais ser usado. No lugar, use getAttribute().
[Parar neste erro]

…ute(i),“string”==typeof r){try{r=“true”===r?!0:“false”===r?!1:“null”===r?null:+r…

jquery…-min.js (linha 3)

ReferenceError: JsonAndAjax is not defined

[color=red][b] [/color][/b]


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
		//Recuperar o Nome da pasta de um parametro da queryString
		PrintWriter out = resp.getWriter();
		try {
			String requestId = req.getParameter("requestId");
			UploadDir upDir = new UploadDir(requestId, false);
			ArrayList<File> listaFile = upDir.getFiles();
			
			resp.setContentType("application/json;charset=UTF-8");
			JSONArray jarr = new JSONArray();
			
			
			
			for(File f : listaFile){
				JSONObject job = new JSONObject();
				job.put("Nome :", f.getName());
				job.put("Size :" ,f.getTotalSpace());
				job.put("Content type:",  "jpg");
				job.put("url:",  "INCLUIR_URL_CORRETA");
				jarr.put(job);				
			}
//	out.println(jarr.toString());
							
	//	req.setAttribute("msg", jarr.toJSONObject(jarr));
			
		//	req.getRequestDispatcher("jqueryui.html").forward(req, resp);
			
			
		} catch (UploadException e) {
			e.printStackTrace();
			out.println("{'error':"+e.toJson()+"}");
		}
		//recuperar list de File

catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

Primeiramente, Bem Vindo ao Guj! Segundo, quando for colocar os códigos coloque dentro do [ code] [/ code] “Só clicar no botão Code”

Quanto a sua pergunta, parece que ele não está encontrando o arquivo do jquery, voce esta utilizando algum tutorial para fazer esse sistema?

Obrigado ! Agora , quanto ao projeto , não estou utilizando nenhum tutorial , só pesquisando na web mesmo…

E quanto ao erro do console , também achei a mesma coisa quando vi, o estranho é que ele chegou a funcionar uma vez, o que é muito esquisito!

Realmente estranho ter funcionado 1x, mostra os imports que vc está usando e a url que vc está usando para acessar o index do projeto!

Então , acertei alguns lances e descobri que o que não estou conseguindo é acessar o servlet para buscar os dados de um JSON…

   * mensagem de erro pelo firebug...

   [color=red]NetworkError: 404 Not Found - http://localhost:8080/dupload?requestId=teste[/color] 

function JsonAndAjax() { $.getJSON("/dupload?requestId="+requestId, {} ,function(jarr){ // ele não aceita esse caminho do Servlet ... teria outra forma de acessa-lo? itemsHtml = '<table>'; for (var i = 0; i < jarr.length; i++) { itemsHtml += '<tr>'; itemsHtml += '<td>' + jarr[i] + '</td>'; itemsHtml += '<td>' + jarr[i] + '</td>'; itemsHtml += '<td>' + jarr[i] + '</td>'; itemsHtml += '</tr>'; } itemsHtml += '</table>'; $('#items').html(itemsHtml); }); }

Obrigado pela ajuda!

Bom, geralmente vc precisa colocar o nome do projeto, depois do localhost e depois a sua requisição!! Digamos que o seu projeto fosse Upload normalmente na url ficaria assim: http://localhost:8080/Upload/dupload?requestId=teste!!

Poxa , muito obrigado! Ele já está fazendo a integração com o Servlet… Mas, infelismente ainda não está conseguindo varrer o JsonArray… :frowning:

 Só pra esclarecer... Esse function(jarr) busca o objeto Json lá do Servlet ? estou certo??
 Enfim , fiz o teste e testifiquei que ele estapassando pelo alert(ok) e tambem está encontrando o servlet..
 Já o alert(itemsHtml) já não está passando....    
 Acho que o problema está quando tento varrer este array... 

[code]function JsonAndAjax() {

alert("ok"); 
$.getJSON("http://localhost:8080/uploader0/dupload?requestId="+requestId , {} ,function(jarr){  //   acho que  está estorando no function(jarr)...  
    itemsHtml = '<table>'; 
    alert(itemsHtml);
    
    for (var i = 0; i < jarr.length; i++) {  
        itemsHtml += '<tr>';  
        itemsHtml += '<td>' + jarr[i].Nome + '</td>';  
        itemsHtml += '<td>' + jarr[i].Size + '</td>';  
        itemsHtml += '<td>' + jarr[i].Contenttype + '</td>'; 
        itemsHtml += '<td>' + jarr[i].url + '</td>';  
        itemsHtml += '</tr>';  
    }  
    itemsHtml += '</table>'; 
  alert(itemsHtml);
    
    $('#items').html(itemsHtml);  
});  

} [/code]

[code] @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

	PrintWriter out = resp.getWriter();
	try {
		String requestId = req.getParameter("requestId");
		UploadDir upDir = new UploadDir(requestId, false);
		ArrayList<File> listaFile = upDir.getFiles();
		
		resp.setContentType("application/json;charset=UTF-8");
		JSONArray jarr = new JSONArray();
		
		
		
		for(File f : listaFile){
			JSONObject job = new JSONObject();
			job.put("Nome", f.getName());
			job.put("Size" ,f.getTotalSpace());
			job.put("Contenttype",  "jpg");
			job.put("url",  "INCLUIR_URL_CORRETA");
			jarr.put(job);				
		}
			//out.println(jarr.get(0));
						
		
		
		
	} catch (UploadException e) {
		e.printStackTrace();
		out.println("{'error':"+e.toJson()+"}");
	}
	//recuperar list de File

catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}[/code]

Vamos lá!

  1. Você sabe utilizar as ferramentas de desenvoledor Web dos brownser? Para o firefox tem o Firebug, para o chrome tem o Webkit e o IE tem o seu próprio kit, para vc utilizar é só vc apertar F12 em qualquer um dos brownsers.

  2. Me parece que vc está utilizando o Jquery, só para ter certeza coloca os imports das páginas que vc está utilizando (Caso seja JQuery mesmo você pode ir no site deles para obter o método de funcionamento das funções implementadas por eles):
    Download JQuery: http://jquery.com/
    Documentação: http://api.jquery.com/
    Documentação JQuery.getJson: http://api.jquery.com/jQuery.getJSON/
    A única coisa é que está tudo em inglês, mas nada que um translate não resolva!! mais abaixo eu posso te mostrar um exemplo de getJson!!!

  3. Você me disse que ele está passando pelo alert da function, beleza, mas você precisa saber 2 coisas antes de testar o Json, caso esteja com dúvidas em relação a url posta o web.xml
    I- O JSon está sendo gerado de forma correta?
    Neste caso, coloque um println para saber como ele está gerando o JSon
    II- O JSon está sendo fornecido para a view?
    Acesse a url que está fornecendo o JSon, ele deve gerar um texto com o JSon criado ou um arquivo para baixar com o JSon criado

  4. Caso não tenha certeza se a function está realmente acessando o servlet correto, debugue seu servlet, caso tenha dúvidas se ele está fazendo a requisição certo debugue o script (O firebug e o Webkit conseguem debugar o script que vc criou)

Exemplo de Json
minha url: http://localhost:8080/Portal2/mensagens.json
Metodo: Get
Tipo de Dado: JSON
resposta da url:

[
{"mensagem":"Teste1"},
{"mensagem":"Teste2"},
{"mensagem":"Teste3"},
{"mensagem":"Teste4"}
]

Via Ajax

var mensagens='';
	$.ajax({
		url:'mensagens.json', //URL que gera o JSon
		cache: false, //Opcao para armazenar o Json no computador remoto (default true)
		method: 'GET', //Metodo HTTP utilizado da url
		dataType: 'JSON', //Tipo de dado fornecido pela url
		async: false, //Sincronia da requisição com o restante do código
		success: function(data){ //Caso tenha sucesso na resposta da requisicao
			mensagens = $.map(data, function(element, index){
				return element.mensagem + ' / ';
				});
			}
	});
	alert(mensagens); //Este alert vai gerar isto: "Teste1 / Teste2 / Teste3 / Teste4"

Via getJson (Este é apenas um atalho do $.ajax)

var mensagens='';
$.getJSON('mensagens.json', {requisicao: 'requisicao'}).done(function(data){
    mensagens = $.map(data, function(el, val){
        return el.mensagem+' / '
    });
});

alert(mensagens); //Este alert vai gerar isto: "Teste1 / Teste2 / Teste3 / Teste4"

Mickdark , muito obrigado pela ajuda, eu consegui resolver. sou programador JAVA,
sem nenhuma vivencia até então com javascript/jquery…
Mas é assim que se aprende né? rs. O problema estava na chamada da function(data)
com os objetos do JsonArray, e mais uma pancada de erros bobos de tags e nas functions()…
Quanto a ferramenta debug pra browser eu já uso o firebug.

Muito obrigado mesmo. Vida longa e próspera!

Tranquilo jlsilva, pra vc tambem ^^!!