DWR - Isso sim eh matador

30 respostas
Rafael_Steil

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

30 Respostas

om1

Show de bola :smiley:

rodrigo_gomes

eu achei show de bola mesmo!!!

só fiquei um pouco encucado com o lance da segurança

não sei se entendi bem, mas por exemplo , nesse caso q vc fez eu taria expondo a classe Publico (ou os metodos publicos dela) a pessoas mal intencionadas nao?

acho que fiquei confuso por isso

If you create a FileBean with a public appendStringToFile() method and export it using DWR, then you are giving an attacker a simple method of filling your filesystem up.

In addition if you didn’t specify that object in dwr.xml, but you did specify a bean that included FileBean as a parameter, then if you give the attacker the same possibilities unless you have your BeanConverter nailed down properly.

Rafael_Steil

Eh, tem que ter um certo cuidado com o que voce vai expor. O que me parece ser uma boa saida eh usar algo como um Facade especifico para acoes do dwr, cuidando para nao retornar uma referencia direta para algo do sistema (aka, fazer uma copia etc).

Rafael

Z

Opa eu já uso a DWR para algumas coisas, mas estou tendo problemas para o seguinte…

Preencher um select list dinamicamente com os dados de um objeto! Eu consigo exibir os dados do objeto em uma página dentro de uma table utilizando

function geraListaChamandoMetodoClasse() {
         Classe.metodo(preencheTabelaFerramentas);
}

var getId = function(unit) { return unit.id };
var getNome = function(unit) { return unit.nome };

function preencheTabelaFerramentas(lista) {
         DWRUtil.addRows("nome_tabela", lista, [ getId, getNome ]);
}

O resultado disso é perfeito! Consigo acrescentar o ID e o NOME do meu objeto normalmente, porém ao tentar utilizar a mesma lista para preencher meu select list ele dá alguns problemas, o codigo é o seguinte

function geraListaChamandoMetodoClasse() {
         Classe.metodo(preencheSelectFerramentas);
}

var getId = function(unit) { return unit.id };
var getNome = function(unit) { return unit.nome };

function preencheSelectFerramentas(dados) {
       DWRUtil.addOptions("selectTeste", dados, getId, getNome);
    }

Meu select list é preenchido com as posicoes corretas, por exemplo, se o metodo retornar uma lista com 6 objetos o select list assume 6 posições, porém todas elas vazias, sem VALUE e sem nada na exibição!

tentei fazer algumas alterações do tipo

function preencheSelectFerramentas(dados) {
       DWRUtil.addOptions("selectTeste", dados, [getId, getNome]);
       //colocando chaves entre chaves
}

Realmente nada consegui! Caso eu coloque da forma descrita abaixo, me mostra um select list com as 5 opções preenchido com [object] [object]

function preencheSelectFerramentas(dados) {
       DWRUtil.addOptions("selectTeste", dados);
       //colocando chaves entre chaves
}

Verifiquei na pagina de teste do metodo da DWR e o resultado eh semelhante a esse abaixo:

[

{

id:1,

nome:Teste,

},

{

id:2,

nome:Teste2,

},

{

id:3,

nome:Teste3,

},

{

id:4,

nome:Teste4,

},

{

id:5,

nome:Teste5,

}

]

Alguém sabe o que eu posso fazer para resolver isso!?

om1

Opa

Você tentou sem o prefixo ‘get’? Assim:

DWRUtil.addOptions("selectTeste", dados, id, nome)

?

Verifique também se no seu dwr.xml está definido conversor para o tipo de objeto que vem nesta sua lista.

[]s

Z

Kra o conversor do objeto estah Ok, como eu falei antes consigo manipular os dados mas soh nao consegui quando fui tratar select list…

A mesma coisa do getId, getNome consegui usá-los normalmente para preencher uma TABLE porem o select list insiste em nao funcionar corretamente, a questao de usar sem get dah um erro [Object error].

Creio q nao devo estar fazendo algum detalhe! Voce jah usou DWR para este fim? Qual forma voce fez?!

abracos…

om1

Opa.

Já usei pra isso sim. Olhei agora e vi o detalhe que estava faltando no seu código(e no q eu te mandei).

O correto é

DWRUtil.addOptions("selectTeste", dados, "id", "nome")

Havia esquecido das aspas entre id e nome. Sem elas, deu exatamente o erro que vc mencionou. Testa aí que agora deve funcionar.

[]s

Z

Kra redondadsso!!

Valeu d+!! :smiley:

Depois vou fazer uns exemplos de altas coisas q fiz com a DWR e postar aqui pra exemplificar pra galera!! :idea:

Abracos…

Rodrigo_Carvalho_Aul

Quero. Infelizmente Java ainda não tem algo parecido… :frowning:

[]'s

Rodrigo C. A.

J

Quero. Infelizmente Java ainda não tem algo parecido… :frowning:

[]'s

Rodrigo C. A.

Já viu isso? https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/

urubatan

juzepeleteiro:

Já viu isso? https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/


Valeu por este link, acabou de colocar o ajaxanywhere no bolso :smiley:

J

urubatan:
juzepeleteiro:

Já viu isso? https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/


Valeu por este link, acabou de colocar o ajaxanywhere no bolso :D

Eu nunca usei o ajaxanywhere, mas já utilizei esse ajax4jsf que é do caramba. Simplesmente funciona. Maginifico! (Eu utilizo com facelets).

Luiz_Aguiar

EU acho isso particularmente nojento… odeio JS e HTML, ao invés de evoluir, parece que ficamos reinventando utilidades pra coisas ultrapassadas.

Desculpem… é minha opnião.

Beren

EU acho isso particularmente nojento… odeio JS e HTML, ao invés de evoluir, parece que ficamos reinventando utilidades pra coisas ultrapassadas.

Desculpem… é minha opnião.

JavaScript não intrusivo, CSS3 e XHTML não são coisas “ultrapassadas” por exemplo, gostaria de entender seu ponto de vista em relação a pq JS e HTML são ultrapassados e quais suas alternativas.

Thx.

Ironlynx

Luiz, tb não sou lá muito fã de programação WEB, mas não entendo como permitir a criação de interfaces ricas(como o Ajax permite), sem necessitar de flash e outros pode ser ruim… claro que atrelar código é sempre perigoso, mas se houver um benefício maior…
Vou lhe dar um exemplo real: Tô fazendo uns testes para uma aplicação, cheia de gráficos usando JFreeChart.O objetivo dela é bem claro: substituir a necessidade de ter um Excel nas máquinas para ver esses gráficos, ou ter uma JRE instalada em cada máquina que for ver os applets.Claro que para substituir os applets eu apanho de algumas coisas(principalmente tendo que reescrever a API ou criando features que não foram implementadas no JFreeChart), mas tirando alguns trabalhosos gráficos específicos ou “On the Fly”, dah para ser feito.(No início eu achei que não daria…) :wink:

Luiz_Aguiar

Então Lucas, cara EU vejo assim… todas tecnologias evoluem, algumas muito rápido, mas algumas são as mesmas de décadas passadas, a qtos anos usamos JS e HTML pra montar web sites?
o Ajax é sim uma tentativa muito boa de retalho (evolução) dessas tecnologias ultrapassadas, e sim, consegue dar um resultado final muito agradável, mas ainda é a mesma coisa de décadas atrás, apenas com algumas facilidades e “features” feitas de maneiras mais “fáceis”.

EU acho um tremendo atrado tecnológico ficarmos em pleno ano de 2006, com o avanço que já existe hoje em termos de processamento, armazenamento, hardware e etc, colocar a mão em HTML pra se fazer alguma coisa.

Alternativas :?:
Não tenho todas, e talves algumas nem existam ainda, mas por exemplo:
:arrow: Interfaces ricas: Flash, é proprietário? sim, mas o plugin existe em 99,999999999999% dos browsers do universo.
Não querem usar nada proprietário? pq as organizações não desenvolvem uma alternativa (ou nova plataforma) aberta então? ou será que o melhor é ficar arrastando o HTML até 2100 por ai?

Como não por a mão hoje em HTML então :?:
É um insulto pensar que não se deselvolvam ferramentas que simplesmente façam uma página web de maneira simples e rápida, sem precisar nunca ver um código na vida.
Mas ai vem aqueles que dizem, ah mas essas ferramentas vão gerar 15 linhas desnecessárias de código… e blábláblá… sim quando eu usava modem de 33.600 isso me preocupava mesmo, mas hj qualquer buteco tem um conexão de 512Kbps, redes corporativas na casa dos Gigas, e por ai vai.

O que EU vejo, é que esta faltando pensamentos “futuristas” pra quem desenvolve essas soluções, ou talves muita gente vai achar que vai perder seu “poder” intelectual se começar a usar mais o mouse do que o teclado. Bom eu prefiro demorar o menor tempo possível para se fazer as coisas bem feitas e com qualidade, e tenho certeza que muitas dessas soluções que eu vislumbro, fariam isso muito bem feito e com tempos muito menores tbm.

Desculpe pelo texto grande… mas é isso… por favor, não estou tentando mostrar que as coisas são certas ou erradas, apenas como EU as vejo.

Valeu!

J

Luiz Aguiar:
[Interfaces ricas: Flash, é proprietário? sim, mas o plugin existe em 99,999999999999% dos browsers do universo.
Não querem usar nada proprietário?

Flash é tão proprietário quanto o próprio Java.

David

Como você mesmo disse, é uma opinião muito pessoal, mas eu odeio Flash. E adoro javascript… :slight_smile:

Editado: Eu falo para usar mesmo, e não pra programar. Para programar eu não posso fazer uma análise, pois eu programo em Javascript mas não sei nada de Flash.

Outra coisa, quem sabe usar bem mesmo Javascript, como o Lucas Zingano falou, sabe como é legal programar em Javascript.

jaboot

David:
Como você mesmo disse, é uma opinião muito pessoal, mas eu odeio Flash. E adoro javascript… :)
Putz, eu também. Legal Luiz, gostei da sua opinião, mas por enquanto acho que a gente vai ter que se virar com JS e HTML mesmo.
Mas pense por outro lado - no começo era puro html, daí veio o XML e assim por diante. Estamos evoluindo, passo a passo, degrau a degrau.
Eu acho Ajax o máximo. Tinha que fazer tudo na unha com Remote Scripting (argh) e detestava. Aquilo era atraso de vida.

Luiz_Aguiar

David:
Editado: Eu falo para usar mesmo, e não pra programar. Para programar eu não posso fazer uma análise, pois eu programo em Javascript mas não sei nada de Flash.

Outra coisa, quem sabe usar bem mesmo Javascript, como o Lucas Zingano falou, sabe como é legal programar em Javascript.


Então eu dei o exemplo do Flash apenas pra poder ilustrar com algo conhecido.

Já trabalhei com Flash, tem programação tbm e tal, mas as possibilidades de interfaces e recursos são infinitas vezes maiores do que o Ajax ou outra tecnologia poderá fazer em pelo menos algumas décadas.

Entendo o comentário seu sobre o Lucas por exemplo, é que realmente penso que algumas coisas, como digitar códigos de página web, é vida perdida com nada.
Exemplo, só o código que vc pode gerar de um UML muito bem feito de um projeto, te faz ganhar muitas horas que perderei com as coisas que realmente não são o “grosso” de um sistema.

por favor, não vamos entrar em geradores de código, MDA e outras coisas… foi apenas um exemplo.

Luiz_Aguiar

balarini:
Mas pense por outro lado - no começo era puro html, daí veio o XML e assim por diante. Estamos evoluindo, passo a passo, degrau a degrau.
Eu acho Ajax o máximo. Tinha que fazer tudo na unha com Remote Scripting (argh) e detestava. Aquilo era atraso de vida.

O duro é que esse começo já faz tempo tem não acha? e ainda estamos usando as mesmas coisas.

Mas acredito tbm que uma hora ou outra, um grande salto de evolução poderá surgir.

David

Mas um código em javascript bem feito não deve nem aparecer na página… É isso que chamamos de javascript não-intrusivo.

Depois dá uma olhada em uns frameworks para javascript como prototype ou behaviour, são bem interessantes.

Beren

Já que se tocou no assunto do Flash…

Vale lembrar que, ao menos por um BOM tempo SEO (Search Engine Optimization) não vai providenciar nenhum jeito de indexar Flash, que por sinal não tem nada de semântico o que normalmente leva a galera dos webstandards a quase surtar e que complica pra caramba a questão de desenvolver algo para a internet.

Outra coisa, interfaces ricas podem ser feitas com DHTML sim… e muitas vezes vai ser preferível ao invés de Flash simplesmente pq os programadores tem conhecimento da tecnologia e tal.

Além do que alegação de que não precisa-se preocupar pq atualmente tod mundo tem banda larga não ajuda, quantas vezes você já conectou o laptop numa rede wireless e teve problema de estar muito lento? eu pelo menos não dou sorte com redes wireless hehe

Por final, please, gostaria de entender qual o problema de usar-se tecnologias com décadas de uso, ou ao menos, quais são as features que você acha que faltam tanto para HTML e JS.

Sobre criação automática de código que vc tanto reclama, well, basta lembrar que o problema com o código monstruoso criado por certos editores eh um problema pois se vc quer consertar um pequeno detalhezinho perdido no meio do código eh bastante complicado e normalmente designers são chatos sobre isso hehe…

responde aih mais uma vez quais os reais problemas que você vê no uso de HTML e JS, se vc simplesmente não gosta, ok, mas se tem argumentos, please I look forward to reading them :wink:

Luiz_Aguiar

Lucas Zingano:
Vale lembrar que, ao menos por um BOM tempo SEO (Search Engine Optimization) não vai providenciar nenhum jeito de indexar Flash
como eu disse antes… usei o flash apenas como exemplo fácil de visualização de todos… qto ao SEO, eles que se virem né, não podemos pensar em todos problemas do mundo hehehe

Lucas Zingano:
Outra coisa, interfaces ricas podem ser feitas com DHTML sim… e muitas vezes vai ser preferível ao invés de Flash simplesmente pq os programadores tem conhecimento da tecnologia e tal.
Sim pode, nunca disse o contrário, só disse que elas levam muito tempo, tem muita gambiarras e nunca terão a mesma qualidade visual do Flash (por exemplo).

Por que pararam de usar o fusca? os 486? o avioes teco-teco?
por esses mesmos motivos… as tecnologias (devem) evoluem, e pra mim, criar páginas web, virou uma grande gambiarra, uma grande colcha retalhada pra funcionar ao agrado.

como eu disse, não quero entrar nesse tema de geradores, case, mda e etc… mas mesma assim vc levaria muito, mas muito menos tempo pra arrumar esse detalhisinho do que pra fazer na unha todo esse código monstruoso do gero. E se os designers acham ruim, é pq eles sabem oq é certo (sim já trabalhei com isso tbm), programadores não tem muita noção de interface, ergonomia e essas porcarias… estão ali apenas pra digitar e ponto final. (por favor não me chinguem muito depois dessa minha afirmação hehehe)

Queria colocar apenas mais um detalhe, acho que muita gente está acostumada a ver um sistema web como grandes formulários e listas, e existem coisas muito além disso, que necessitam de recursos visuais e multimídia, de grande interação com o usuário (leia-se usar o mouse e não o teclado), gráficos animados (se alguem falar em gif eu juro que mato hehe)e muitas outras coisas que não são exploradas.

Beren

Foi mal Luiz, mas continuo sementender o seu ponto…

SEO eh MUITO importante e não deve ser tratado como um “tema de designer” pq aih entra no mínimo a figura do Arquiteto de Informação e depende claro da situação, se for uma aplicação web fechada, ok, SEO não é lá alguma coisa muito importante, mas para websites e aplicações de e-commerce por exemplo, SEO ajuda e muito…

sobre a qualidade visual do Flash continua sendo questão do designer, os dois tem plenos recursos (e dependendo do caso, manutenibilidade do Flash eh dolorida) para se ter o mesmissimo look-and-feel… e n estou falando de animações, estou falando de interface… :wink:

well, continuando, o Fusca, o Teco-teco e o 486 são “modelos”, pq na verdade, por exemplo, reclamar de HTML 4.0 já é bastante comum, assim como foi no tempo do 486 e o surgimento da família Pentium… e a web eh mesmo uma colcha de retalhos, pq não decidimos que todo mundo deveria usar ASP pra fazer suas páginas e assim não ficamos com essa impressão de gambiarra? hehe e mais, se alguém tem alguma experiencia com Flex, please, fale alguma coisa hehe

finalizando, se vc n quer entrar nesse tem a de geradores e afins, vamos parar de falar de lingugens de marcação, seja ela HTML ou whatever, mas de qq forma, vale lembrar que padrões web standards servem para diminuir a quantidade de código monstruoso, supérfluo e redundante na criação de web pages…

ah, concordo que recursos visuais e multimídia são importantes, mas somente num contexto apropriado e não simplesmente para criar interfaces (que basicamente eh a solução que vc esboçou)

F

Pessoal, não sei se vocês conhecem isto

www.j-wings.org

Eu estou adorando para fazer desenvolvimento para web, utilizando integração com servidores JBoss e Sun Application Server.

Acho que vocês que querem coisas mais eficientes para a web vão gostar.

Abraços

Mauricio_Linhares

fabian_martins:
Pessoal, não sei se vocês conhecem isto

www.j-wings.org

Eu estou adorando para fazer desenvolvimento para web, utilizando integração com servidores JBoss e Sun Application Server.

Acho que vocês que querem coisas mais eficientes para a web vão gostar.

Abraços

Pra ficar fazendo postback nas páginas é melhor usar JSF que é padrão. Componentes AJAX são muito mais indicados pra interfaces complexas, sem contar que não é necessário ficar dando postback e atualizando as páginas inteiras.

F

Mas J-Wings tem DWR

Mauricio_Linhares

Não vi isso, em todos os exemplos que eu testei aqui ele fica dando post no formulário e recarregando a página inteira.

F

Eu fiz uma aplicação exemplo e fiz o deploy no JBoss e Sun Application Server 9, acessando uma base Firebird via recurso JNDI.

Não pisca nem uma vez.

Criado 24 de março de 2005
Ultima resposta 7 de ago. de 2006
Respostas 30
Participantes 14