Struts 2 + DWR

13 respostas
tiagoemerick

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?

13 Respostas

L

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…

tiagoemerick

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…

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

tiagoemerick

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?

L

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!!

tiagoemerick
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!

L

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!!

renatocustodio

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.

andersondamasio

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

L

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

tiagoemerick

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?

W
O ideal é tomar cuidado com o excesso de ajax no Struts2 :
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <s:head theme="ajax" />
        
    </head>
    <body>
    
.........    
    
    </body>
</html>
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.

andersondamasio

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

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
        &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
        &lt;html&gt;
            &lt;head&gt;
                &lt;title&gt;Cadastro Física&lt;/title&gt;
                &lt;s:head theme="ajax"/&gt;
            &lt;/head&gt;
            &lt;body&gt;    
                
                &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;
diegolirio

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 ???

Criado 5 de maio de 2008
Ultima resposta 23 de fev. de 2012
Respostas 13
Participantes 6