| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2010 18:50:40
|
tiago_stos
Joined: 17/12/2010 18:19:40
Messages: 3
Offline
|
Estou iniciando um projeto novo com o Mentawai 2.0 e estou tendo um problema com Ajax. Segue minhas classes:
Code:
public class ApplicationManager extends org.mentawai.core.ApplicationManager {
public void loadActions() {
ActionConfig actionConfig = new ActionConfig("/adicionaUsuario",UsuarioAction.class);
actionConfig.addConsequence(SUCCESS, new AjaxConsequence( new MapAjaxRenderer() ));
addActionConfig(actionConfig);
}
}
Code:
public class UsuarioAction extends BaseAction {
public String execute() throws Exception {
String nome = input.getString("nome");
String login = input.getString("login");
String senha = input.getString("senha");
Usuario usuario = new Usuario();
usuario.setNome(nome);
usuario.setLogin(login);
usuario.setPassword(senha);
usuario.adiciona();
output.setValue("resposta", "OK");
return SUCCESS;
}
}
Ao tentar cadastrar algum usuário encontro o seguinte erro:
Code:
org.mentawai.core.ActionException: Action has no consequence for result: adicionaUsuario / innerAction = NULL - error
at org.mentawai.core.Controller.invokeAction(Controller.java:935)
at org.mentawai.core.Controller.service(Controller.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Já pesquise muito e não encontrei o motivo do erro. Alguém sabe o que pode estar acontecendo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/12/2010 19:40:33
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Fala grande Tiago,
O problema é o seguinte:
Tem algum filtro aí retornando "error" como resultado.
Como sua action só está configurada para SUCCESS então o controlador fica sem saber o que fazer.
Liga o DEBUG MODE e veja direitinho o que está sendo executado no stack de filtros para saber o que e porque está retornando error.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2010 07:15:03
|
tiago_stos
Joined: 17/12/2010 18:19:40
Messages: 3
Offline
|
Saoj, bom dia.
Com base no que você escreveu, apenas fiz isso:
Code:
ActionConfig actionConfig = new ActionConfig("/adicionaUsuario",UsuariosController.class);
actionConfig.addConsequence(SUCCESS, new AjaxConsequence( new MapAjaxRenderer() ));
actionConfig.addConsequence(ERROR, new AjaxConsequence( new MapAjaxRenderer() ));
addActionConfig(actionConfig);
Não deu mais erro. Isto está correto, ou não é bom fazer isso?
Quanto ao debug mode, o configurei, mas ainda não consegui entender como ele funciona.
Muito obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2010 13:42:04
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Vc tem que descobrir porque sua action está retornando ERROR. Isso é um problema que vc não pode ignorar. Pode ser a action ou algum filtro. O debug mode vai te permitir olha o stack de execução para entender o que está retornando o que. http://www.mentaframework.org/debugmode.jsp
Na aplicação de referencia vc pode ver o debug mode funcionando: http://menta.seducaotecnologica.com.br
Quando o erro fala: "Action has no consequence for result: adicionaUsuario / innerAction = NULL - error" significa que sua action retornou "error" como resultado e que não havia consequencia para esse resultado. Agora vc configurou uma consequencia para error, mas precisa entender porque tá retornando error.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/12/2010 15:58:03
|
tiago_stos
Joined: 17/12/2010 18:19:40
Messages: 3
Offline
|
O Saoj atualizou a aplicação de referência com um exemplo de suporte a ajax. No meu caso, o ApplicationManager ficou assim:
Code:
public class ApplicationManager extends org.mentawai.core.ApplicationManager {
public void loadActions() {
action("/adicionaUsuario", UsuarioAction.class)
.catchAll(result());
}
}
E a Action:
Code:
public class UsuarioAction extends BaseAction {
public String execute() throws Exception {
try {
String nome = input.getString("nome");
String login = input.getString("login");
String senha = input.getString("senha");
Usuario usuario = new Usuario();
usuario.setNome(nome);
usuario.setLogin(login);
usuario.setPassword(senha);
usuario.adiciona();
return SUCCESS;
} catch (Exception e) {
return ERROR;
}
}
}
Funcionou OK.
Mas uma dúvida ainda persiste. Como faço para retornar JSON? Posso simplesmente retornar no return?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/12/2010 16:06:43
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
tiago_stos wrote:
Mas uma dúvida ainda persiste. Como faço para retornar JSON? Posso simplesmente retornar no return?
Bota o que quiser no Output e coloca no app manager:
Code:
on(SUCCESS, new AjaxConsequence(new JsonRenderer()))
E parte para o abraço!
|
Sergio Oliveira
|
|
|
 |
|
|