Comunicação DWR e Action

Ola pessoal,

Alguem conseguiu usar o Action com o DWR. Eu consegui com o ActionForm, mas eu preciso executar um metodo na Action, mas sem refresh, e por isso quero usar com o DWR.

VLW!!

E ai,

Bom, eu tentei usar DWR com a Action e deu certo mas, como se fosse um POJO ( uma classe normal ). Isso implica em nao ter acesso á session e request. E o resultado é interpretado prlo DWR como se fosse o retorno de um método qualquer, ele nao redireciona para outra página (se é isto o que vc precisa).

Em casos como esse, em que nao pode dar o refresh, eu uso o struts 2 mesmo. Tem uma taglib [<%@ taglib prefix=“sx” uri="/struts-dojo-tags" %>], que da pra usar. O submit tem parametros que suportam dizer a action que deve ser executada e que “parte” do corpo da pagina deve ser feito o refresh (sem post).

Com DWR você consegue ter acesso a objetos de sessão e request através do WebContext dele.

WebContext ctx = WebContextFactory.get();
Teste teste = (Teste) ctx.getHttpServletRequest().getSession().getAttribute("Teste"); //sessao

ctx.getHttpServletRequest().setAttribute("teste", teste); //setando no request para usar na pagina

Abraços,

Com o ActionForm deu certo usando o Annotations, e não consegui usando as tags <create></create> do dwr.xml. Usei dessa forma:

@RemoteProxy(name="TesteJS")
public class Teste extends Action{

//corpo da classe

}

Com a action pelo que vi, tenho que fazer o mesmo, mas o retorno não vou poder aproveitar. Então eu vou tentar usar o codigo do rodrigoK blz?

Qualquer resultado eu irei postar pra vcs.

VLW!!

Eu fiz aqui de duas formas e não deu certo:

Primeiro, eu fiz o mapeamento da Action no DWR:

&lt;create creator="new" javascript="PessoaAction" scope="request"&gt;
   &lt;param name="class" value="com.celulajava.palestradwr.actions.PessoaAction"/&gt;
&lt;/create&gt;

E não deu certo.

Na segunda, eu usei os Annotations:

//Rotulando o nome da Action para o DWR, para criar o "objeto" Javascript
@RemoteProxy(name="PessoaAction")

E tbm não deu certo.

Para teste tbm, criei um método simples para retornar um valor do tipo String para a tela.

  public String testeDWR(String texto){
    return texto;
  }

E criei um método em Javascript para pegar o retorno do método e imprimir na tela:

PessoaAction.testeDWR(name, function(data){
    alert("Nome "+name);
    dwr.util.setValue("action", data);
});

Mas mesmo assim não deu certo.

Você configurou o web.xml?

&lt;servlet&gt;
  &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;
  &lt;display-name&gt;DWR Servlet&lt;/display-name&gt;
  &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;config&lt;/param-name&gt;
		&lt;param-value&gt;/WEB-INF/config/dwr.xml&lt;/param-value&gt;
	&lt;/init-param&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;debug&lt;/param-name&gt;
		&lt;param-value&gt;false&lt;/param-value&gt;
	&lt;/init-param&gt;
  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;

Ele esta assim:

 &lt;!-- Servlet DWR --&gt;
  &lt;servlet&gt;
  	&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;
  	&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;
  	&lt;init-param&gt;
  		&lt;param-name&gt;debug&lt;/param-name&gt;
  		&lt;param-value&gt;true&lt;/param-value&gt;
  	&lt;/init-param&gt;
  	&lt;!-- ReverseAjax --&gt;
  	&lt;init-param&gt;
  		&lt;param-name&gt;activeReverseAjaxEnabled&lt;/param-name&gt;
  		&lt;param-value&gt;true&lt;/param-value&gt;
  	&lt;/init-param&gt;
  	
  	&lt;!-- initApplicationScopeCreatorsAtStartup --&gt;
  	&lt;init-param&gt;
  		&lt;param-name&gt;initApplicationScopeCreatorsAtStartup&lt;/param-name&gt;
  		&lt;param-value&gt;true&lt;/param-value&gt;
  	&lt;/init-param&gt;
		&lt;init-param&gt;
      &lt;param-name&gt;maxWaitAfterWrite&lt;/param-name&gt;
      &lt;param-value&gt;100&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;init-param&gt;
    &lt;!-- Classes adicionadas para o DWR Executar --&gt;
    	&lt;param-name&gt;classes&lt;/param-name&gt;
    	&lt;param-value&gt;
    		com.celulajava.palestradwr.bean.Pessoa
      &lt;/param-value&gt;
    &lt;/init-param&gt;  	
  	&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
  &lt;/servlet&gt;
  
  &lt;servlet-mapping&gt;
  	&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;
  	&lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;

E o startup do struts esta como 1. Assim ele nao deu um ClassNotFoundException.

Verifique os includes do PessoaAction, engine e util na sua página, aparentemente é a única coisa faltando;

Se quiser vc pode dar uma olhada em meus tutoriais, estão na minha assinatura.

&lt;script src='dwr/engine.js' type='text/javascript' &gt;&lt;/script&gt;
&lt;script src='dwr/util.js' type='text/javascript' &gt;&lt;/script&gt;
&lt;script type='text/javascript' src='dwr/interface/PessoaAction.js'&gt;&lt;/script&gt;