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!!
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:
<create creator="new" javascript="PessoaAction" scope="request">
<param name="class" value="com.celulajava.palestradwr.actions.PessoaAction"/>
</create>
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?
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/config/dwr.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Ele esta assim:
<!-- Servlet DWR -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<!-- ReverseAjax -->
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<!-- initApplicationScopeCreatorsAtStartup -->
<init-param>
<param-name>initApplicationScopeCreatorsAtStartup</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<!-- Classes adicionadas para o DWR Executar -->
<param-name>classes</param-name>
<param-value>
com.celulajava.palestradwr.bean.Pessoa
</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
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.
<script src='dwr/engine.js' type='text/javascript' ></script>
<script src='dwr/util.js' type='text/javascript' ></script>
<script type='text/javascript' src='dwr/interface/PessoaAction.js'></script>