O Direct Web Remoting (https://dwr.dev.java.net/) MATA A PAU. Eh estupidamente simples de usar. Para quem quer se aventurar com XMLHttp (Ajax) em Java, eh o melhor que tem. Eis um exemplo que adiciona e lista pessoas, sem sair da pagina:
Primeiro a gente faz uma classe estupida de basica, para servir como “persistencia”:
public class Publico
{
private static Map pessoas = new LinkedHashMap();
public String addPessoa(Pessoa p) {
if (pessoas.containsKey(p.getId())) {
return "ERRO: Registro ja existente";
}
pessoas.put(p.getId(), p);
return new Date().toString();
}
public Collection getPessoas() {
return pessoas.values();
}
}
A classe Pessoa eh um pojo com nome, idade e id. O HTML fica assim:
<script>
function adicionar()
{
var pessoa = { id:DWRUtil.getValue("id"), nome:DWRUtil.getValue("nome"), idade:DWRUtil.getValue("idade") };
Publico.addPessoa(f, pessoa);
}
function f(x)
{
document.getElementById("horario").innerHTML = (!x.match("^ERRO")
? "Adicionado às: <b>" + x + "</b>"
: x);
}
function listar()
{
Publico.getPessoas(mostraCadastros);
}
function mostraCadastros(p)
{
var c = document.getElementById("cadastros");
var t = "<table border='1'><tr><th>ID</th><th>Nome</th><th>Idade</th></tr>";
for (var i = 0; i < p.length; i++) {
t += "<tr><td>" + p[i].id + "</td><td>" + p[i].nome + "</td><td>" + p[i].idade + "</td></tr>";
}
t += "</table>";
c.innerHTML = t;
}
</script>
....
<h2>Dados pessoais</h2>
ID: <input type="text" name="nome" id="id"><br/>
Nome: <input type="text" name="nome" id="nome"><br/>
Idade: <input type="text" name="idade" id="idade"><br/>
<input type="button" value="Adicionar" onClick="adicionar();"> <span id="horario"></span>
<hr>
<h2>Cadastros - <input type="button" value="Atualizar" onClick="listar()"></h2>
<div id="cadastros"></div>
E o unico arquivo de configuracao necessario tem as seguintes linhas:
<dwr>
<allow>
<create creator="session" javascript="Publico" class="test.Publico"/>
<convert converter="bean" match="test.*"/>
</allow>
</dwr>
Querem coisa mais linda que isso?
Rafael



