Struts 2 + DWR

Seguinte galera… estou fazendo uma aplicação que usa Struts 2 e outras tecnologias.
Já desenvolvi mt coisa, mas agora quero integrar o DWR e estou com alguns problemas…

Vamos pegar um exemplo pra explicar…

tenho uma tela de cadastro de usuario… entretando tenho uma regra que:
Nao se pode cadastrar 2 usuarios com o mesmo login!
Ok… só com struts 2 isso ta funcionando, mas agora queria fazer sem dar o submit na pag com DWR!

apos DWR todo configurado e testado de q realmente esta chegando na classe sem o submit, vi q ele nao leva os dados do formulario como o struts faz!

com struts se no botao da tela eu colocar o atributo action=“usu!salvar”, ele leva os dados preenchidos para a action… o struts faz isso mesmo! ele parea os beans e preenche tudo no seu obj!

mas se eu tirar o atributo action=“usu!salvar” do botao e deixar só o onclick=“salvar()” chamando o funcao js q usa o dwr pra chegar na classe… ao chegar la o obj vem vazio… nada vem pareado…

uma coisa meio obvia parece… nao esta levando os dados do formulario…

mas alguem teria uma solucao de como fazer?

tiagoemerick,

Nao sei c vou ajudar, mas aqui no nosso sistema usamos DWR, porém não usamos struts2, e qndo vamos mandar alguma informação pro server, temos que montar o nosso objeto aqui do nosso lado antes de mandar pro server…então nao sei c no dwr tem alguma integração com o struts2 que monte o objeto pra voce sem que voce tenha q montá-lo na mão…

[quote=leonickel]tiagoemerick,

Nao sei c vou ajudar, mas aqui no nosso sistema usamos DWR, porém não usamos struts2, e qndo vamos mandar alguma informação pro server, temos que montar o nosso objeto aqui do nosso lado antes de mandar pro server…então nao sei c no dwr tem alguma integração com o struts2 que monte o objeto pra voce sem que voce tenha q montá-lo na mão…[/quote]

era exatamente isso que eu temiaa,
ai pra mim fazer isso… o struts 2 nesse caso praticamente perde seu sentido de vida,
o bom era q ele pareava tudo…

mas talvez ainda exista alguma solucao…
sera q alguem tem outra ideia??

e vlw pela resposta

aproveitando a oportunidade com o profissional do dwr… tenho uma pergunta…

como q vcs montao o obj do lado da jsp?

digo assim…

quando uso so o dwr e mando pra classe eu faco assim:

var cdUsu = document.getElementById(‘cdUsu’).value;
var nmUsu = document.getElementById(‘nmUsu’).value;
var endUsu = document.getElementById(‘endUsu’).value;

Usuario.salvar(cdUsu,nmUsu,endUsu);

aí la na classe eu pego os atributos e monto o obj na classe…

mas tem como montar o obj antes na propria jsp e mandar pra classe o obj ja?!
como?

tiagoemerick,

Aqui trabalhamos com HTML e JavaScript e montamos o objeto usando o conceito de JSON. Este conceito é para transporte de dados em JavaScript, então, nao sei se voce consegue aplicá-lo no seu desenvolvimento usando Struts e JSP…mas vale a pena tentar hehehehe

No xml dwr.xml mapeamos os objetos do nosso server que queremos converter. Aí na classe java que mapeamos neste xml que será a que o DWR vai interpretar colocamos os objetos convertidos como parâmetros de entrada dos métodos que utilizamos, e assim quando chegar no lado java o objeto estará com os dados preenchidos.

Exemplificando a situação, no nosso dwr.xml adicionamos as seguintes linhas:

<convert converter="bean" match="br.com.pojos.Pojo1" />
<convert converter="bean" match="br.com.pojos.Pojo2" />

Aí na nossa classe do lado java, temos os métodos que o dwr vai chamar com os seguintes parâmetros:

public String testePojo1(Pojo1 pojo1) 
{
.......
}

E no nosso JavaScript criamos os objetos JSON da seguinte maneira:

var pojo1 =
			{
				name: DWRUtil.getValue("name"),
				number: DWRUtil.getValue("number"),
				address: DWRUtil.getValue("address")
			};

ClasseJavaNoDWR.testePojo1(pojo1, metodoCallBack);

Lembrando que esses atributos name, number, address, na verdade são atributos de pojos, ou seja, os métodos que o dwr vai usar vai ser o setName, setNumber, setXXX, etc…

Para maiores informações sobre este conceito de JSON, vc pode dar uma olhada nestes links:

http://pt.wikipedia.org/wiki/JSON
http://www.json.org/json-pt.html

É mais ou menos assim que criamos os nossos objetos do lado da tela para mandar pro server…sacou?

Qlq dúvida posta ae que eu tento ajudar hehehe

[]'ssssss!!

var pojo1 =  
 {  
     name: DWRUtil.getValue("name"),  
    number: DWRUtil.getValue("number"),  
    address: DWRUtil.getValue("address")  
  };  
   
ClasseJavaNoDWR.testePojo1(pojo1, metodoCallBack); 

era exatamente isso aqui que eu queria verr…
mas mesmo simplificando dessa forma… eu nao to axando viável usa-lo com struts2…
vaiii ser um grande sacoo fazer isso com todos os objs em todas as jsp’s…

pann;;

enfim… se alguem ai ainda souber um modo de integrar os dois… é bem vinda!

e valeu a ajudaaa ai mano!

tiagoemerick,

entendo seu ponto de vista…realmente nao é tão agradável ficar montando todos os atributos do objeto aqui do nosso lado…

se voce descobrir alguma solução para isso, posta aí que agora fiquei curioso também hehehe…

[]'ss!!

Creio que não deve haver outra forma não.

Outra coisa chata é que assim vc perde todos os interceptors e a validação. Mas quanto a isso já está sendo desenvolvido um plugin, segundo o site já está na versão de testes 2.1.1 do struts 2.

Pessoal e quanto ao suporte ajax já existente no struts?
Não ajuda?

andersondamasio,

Nao trabalho mais com struts, mas como seria esse suporte para ajax nele?? voce teria algum link sobre referências fácil ae?

fiquei curioso depois dessa dicussão sobre o tema… :smiley:

[]'sss

de ajax q ja vem integrado no struts eu uso pouco…
no max pra preencher uma litsta dinamicamente comalgo q acabei de salvar e tal…

mas nao sei se tem como… e se tem eu nao sei fazer… de fazer chamadas em classes e retornar toda e qlqr tela com quaisquer campos usando o ajax dele…
alguem sabe?

e quanto aos links de referencia… dexei tudo no trabalho antigo… nao tenho mais nenhum facil e bom…
seria ate bom pra mim te-los denovo… alguem tem?

O ideal é tomar cuidado com o excesso de ajax no Struts2 :

[code]


<s:head theme=“ajax” />

</head>
<body>

</body>
[/code] Porquê; ele trabalha usando o Dojo por trás dos panos e no "submit" da página ele vai renderizar mais vzs., quero dizer com isso é que vc. tem que tomar cuidado com a utilização do Ajax " " pois há exemplos e exemplos na Net criados mais é com telas simples e nas mais complexas o S2 + DWR mostra alguns erros malucos. è preciso balancear até onde vc. quer chegar com seu desenvolvimento usando o S2 pois há algumas limitações sérias a nível de View e validators nesse framework que precisam ser melhoradas com urgência. Não quero dizer com isso que ele não preste , ele presta só que ele precisa de melhora nos seus plugins e xWork.

sds.

Quanto a cautela no seu uso concordo que por enquanto devemos ter mesmo, tive alguns problemas com validações com struts 2 e performance quanto ao uso de temas, espero que corrijam essas falhas…

Exemplo de cadastro

[code]<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<%@ taglib prefix=“s” uri="/struts-tags" %>
<html>
<head>
<title>Cadastro Física</title>
<s:head theme=“ajax”/>
</head>
<body>

            &lt;table border="0" id="indicator1" style="display:none;position:fixed" bgcolor="#cccccc"&gt;
                &lt;tr&gt;
                    &lt;td align="center"&gt;Carregando...&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td align="center"&gt;<img id="indicator1" src="carregando.gif" alt="Carregando..."  />&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt; 
            
            &lt;s:div id="cadastroDiv" theme="ajax" &gt;
                &lt;s:include value="cabecalho.jsp"/&gt;
                &lt;table width="778" border="0" align="center" cellpadding="0" cellspacing="0"&gt;
                    &lt;tr&gt;
                        &lt;td&gt;<font color="blue" size="3" face="arial">
                                Cadastro Física
                        </font>&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;            
                &lt;s:form action="insereClienteFisica"&gt;
                    &lt;s:token/&gt;
                    &lt;table width="778" border="0" align="center"&gt;
                        &lt;tr&gt;
                        &lt;td width="30%"&gt;&lt;/td&gt;
                        &lt;td width="70%"&gt;&lt;s:actionerror/&gt;&lt;s:fielderror/&gt;&lt;/td&gt;
                        &lt;tr&gt;
                            &lt;td align="left"&gt;&lt;s:textfield name="clienteBean.login" size="11" maxLength="11" label="CPF" required="true"/&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td align="left"&gt;&lt;s:password name="clienteBean.senha" size="20" label="Senha" required="true"/&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td align="left"&gt;&lt;s:password name="clienteBean.confirmacaoSenha" size="20" label="Confimação da Senha" required="true"/&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td colspan="2" align="center"&gt; 
                                &lt;s:submit src="image/btn_continuar.gif" type="image"  name="btnEnviar" targets="cadastroDiv" 
                                      notifyTopics="/insereClienteFisica" theme="ajax" showLoadingText="false" indicator="indicator1" /&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td&gt;<a ><img   ></a>
                            &lt;s:actionerror/&gt;&lt;s:fielderror/&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/table&gt;
                &lt;/s:form&gt;
                &lt;s:include value="rodape.jsp"/&gt;
            &lt;/s:div&gt;
        &lt;/body&gt;
    &lt;/html&gt;[/code]

Olá Pessoal sei que este tópico é um pouco antigo… Mas enfim estou com problema para utilizar o Struts2 com o Dwr, o Dwr só funciona quando comento o Filter do Srtuts2 no web.xml, como faço para utilizar o s dois ???