Ajax

8 respostas
caiomacedor

Boa tarde pessoal. Seguinte estou estudando olivro de AJAX com Java da ALTA BOOKS O’REILLY Steven Douglas Olson. Mas logo de cara ja tive um problema e não estou achando uma solução. No primeiro exercicio que é pra converter o valor de uma tecla para Decimal, fiz tudo conferme o livro mas não esta imprimindo o valor decimal na tela. Vou colocar os codigos aqui pra ver se algum Ajax Man pode me dar uma força.
Minha jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Code Converter</title>
		<link rel="stylesheet" type="text/css" href="../styles/style.css">
		<script language="JavaScript" src="../scripts/ajax.js"></script>
	</head>
	<body onload="focusIn()">
		<h1>AJAX CHARACTER DECODER</h1>
		<h2>Press a key to find its value.</h2>
		<table>
			<tr>
				<td>Enter key here &ndash;&gt;<input type="text" id="key" onkeyup="convertToDecimal()" /></td>
			</tr>
		</table>
		<br clear="all" />
		<table>
			<tr>
				<td colspan="5" style="border-bottom: solid; black 1px">
					Key Pressed: <input type="text" readonly="readonly" id="keypressed" />
				</td>
			</tr>
			<tr>
				<td>Decimal</td>
			</tr>
			<tr>
				<td><input type="text" readonly id="decimal" /></td>
			</tr>
		</table>
	</body>
</html>

Meu *.js

var req;
	function convertToDecimal(){
		var key = document.getElementById('key');
		var keypressed = document.getElementById('keypressed');
		keypressed.value = key.value;
		var url = "/JavaComAjax/response?key=" + escape(key.value);
		if(window.XMLHttpRequest){
			req = new XMLHttpRequest();
		}
		else if(window.ActiveXObject){
			req = new ActiveXObject('Microsoft.XMLHTTP');
		}
		req.open('Get', url, true);
		req.onreadystatechance = callback;
		req.send(null);
	}
 
	function callback() {
		alert('teste')
		if(req.readyState==4){
			if(req.status == 200){
				var decimal = document.getElementById('decimal');
				decimal.value = req.responseText;
			}
		}
		clear();
	}
	
	function clear(){
		var key = document.getElementById('key');
		key.Value = '';
	}
	
	function focusIn() {
		document.getElementById('key').focus();
	}

Meu web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

	<display-name>JavaComAjax</display-name>
	<servlet>
		<servlet-name>AjaxResponseServlet</servlet-name>
		<servlet-class>br.com.ajax.actions.AjaxResponseServlet</servlet-class>
		<load-on-startup>1</load-on-startup>	
	</servlet>
	
	<servlet-mapping>
		<servlet-name>AjaxResponseServlet</servlet-name>
		<url-pattern>/response</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	
	
</web-app>

Meu Servlet

package br.com.ajax.actions;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxResponseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String key = req.getParameter("key");
		if(key != null && key.length() > 0) {
			int keyChar = key.charAt(0);
			String decimalString = Integer.toString(keyChar);
			resp.setContentType("text/xml");
			resp.setHeader("Cache-Control", "no-cache");
			resp.getWriter().write(decimalString);
		}
		else {
			resp.setContentType("text/xml");
			resp.setHeader("Cache-Control", "no-cache");
			resp.getWriter().write("?");
		}
	}
}

Usando o Firebug, ‘plugin para debugar no Firefox’ notei que nunca entra na funcion callback(), ai então é onde acho que esta o problema. Mas infelismente não tenho idéia de como resolver isso.
Desde já muito obrigado a todos.

8 Respostas

caiomacedor

E ai galera ninguem ai sabe qual é o problema acima?

caiomacedor
aleck

Bem, não tenho tempo para rodar seu código e debugar, mas vou dar umas dicas para descobrir o erro:

Verifique os imports necessários.
Isole as funções/métodos e execute 1 a 1 para garantir seu funcionamento isolado.
Vá incrementando o código até encontrar qual parte adicionada ocasionou o problema.

Guilherme_Gomes

Estou assumindo que sua aplicação está no contexto /JavaComAjax

Use o firebug (plugin para firefox) e veja se está dando algum erro de javascript na sua pagina.
Coloque uns debugs também na sua servlet para ver se está passando por ela corretamente e depois poste de novo.

caiomacedor

Guilerme o contexto é esse já fiz tudo isso que vc falou. Foi assim que descobri que nunca passo pela function callback().
E tambem não aparece nenhum erro no firebug não. o problema é que ele não entra na function callback, ai não tem como setar o valor que volta na variavel decimal. Entendeu?

Guilherme_Gomes

Lembra quando você começou a programar? Naquela época ainda não conhecia nenhuma IDE como Eclipse que aponta os erros automaticamente pra você, não dava pra saber se a sintaxe estava certa até tentar compilar… Era um saco, a gente sempre dependia de alguem com uma visão mais fresca, menos viciada no código para descobrir que estava faltando um ‘;’ em algum lugar… Algo bem ridiculo assim…

req.onreadystatechance = callback; //???
//ou seria
req.onreadystatechange = callback;

Você criou uma funcao inutil ^^

caiomacedor

Nossa que vergonha. rsrsrsrs Eu lí esse codigo umas 5 vezes tentando achar o erro e não notei rsr. Muito obrigado Guilherme agora vou continuar com os estudos de AJAX. Valew mesmo fera.

Tchello

Guilherme Gomes:
Lembra quando você começou a programar? Naquela época ainda não conhecia nenhuma IDE como Eclipse que aponta os erros automaticamente pra você, não dava pra saber se a sintaxe estava certa até tentar compilar… Era um saco, a gente sempre dependia de alguem com uma visão mais fresca, menos viciada no código para descobrir que estava faltando um ‘;’ em algum lugar… Algo bem ridiculo assim…

Melhor descrição que eu já lí a respeito de “vista viciada no código”.
Pura verdade.

Isso costuma acontecer principalmente quando estou muito cansado e/ou a horas em cima do mesmo código, daí preciso tomar um cafézinho, caminhar um pouco, fazer qualquer coisa MENOS procurar pelo erro.
Ai sim volto pro código e acabo encontrando o erro muito mais facilmente.
Ta certo que nem sempre funciona, mas certamente relaxar de vez em quando e refrescar a mente é essencial pra uma boa programação, ao menos para mim.

Abraços.

edit: correção ortográfica.

Criado 7 de maio de 2009
Ultima resposta 8 de mai. de 2009
Respostas 8
Participantes 4