[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

Problema com integração com Ajax  XML
Forum Index -> Comentários Gerais
Author Message
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?
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

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

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

 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team