<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!"]]></title>
		<link>http://forum.mentaframework.org/posts/list/19.page</link>
		<description><![CDATA[Latest messages posted in the topic "33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!</title>
				<description><![CDATA[ O Mentawai propõe várias formas de se utilizar Ajax,
Porém existe uma biblioteca JavaScript que vem junto 
com o Menta, que permite um fácil uso e entendimento de ajax no client-side.

Permitindo passar para action quantos parametros forem nescessários ou
um formulário inteiro e retornar para o ajax, um:

 :arrow: Map
 :arrow: List
 :arrow: String
 :arrow: Beans
 :arrow: HTML
 :arrow: ListData

O processo ajax se da por duas etapas,

Primaira é o Request, ou seja, a página requisita algo para o servidor
     sem que haja reflesh de página.
Segunda é o callback/Response, que é uma função JavaScript que recebe
     a resposta do servidor.

O Menta tem duas classes JavaScript que facilita muito o uso das duas
partes que compõem um ciclo ajax.

A primeria parte que é o Request, existe a classe JavaScript "mtw.request()"
que prepara o chamado para enviar ao servidor.
A segunda parte que é o Response, existe a classe JavaScript "mtw.response()"
que possui métodos para recuperação dos dados vindos do servidor.

 :!: A Classe mtw.request:

Métodos:

 :arrow: <b>setUrl(url)</b>
Seta a url que sera enviada ao servidor

 :arrow: <b>onSuccess(callback)</b>
Diz qual será o função que receberá o callback em caso de sucesso.

 :arrow: <b>onError(callback) </b>
Diz qual será o função que receberá o callback em caso de falha.

 :arrow: <b>addParameter(key, value)</b>
adiciona parametros para o request, exemplos:
setUrl("Test.mtw");
addParameter("nome", "Joao");
addParameter("idade", 20);
Produzirá a seguinte URL: Test.mtw?nome=Joao&idade=20

 :arrow: <b>setMethod(method)</b>
Seta o method que será utilizado, post/get , Default POST.

 :arrow: <b>serializeForm(formId)</b>
Envia os dados de um formulário inteiro para o servidor.
Obs: na versão 2.0 este método foi descontinuado.

 :arrow: <b>send()</b>
Envia a requisição.

 :arrow: <b>useLoadingMessage(message)</b>
Exibe um texto no canto superior enquanto o request é
executado.

 :arrow: <b>waitComplete()</b>
Espera o request ser executado completamente, ou seja, faz
um request sincrono, util para encadeamento de requests.

 :arrow: <b>addRequestHeader(key, value) </b>
Adiciona valores ao RequestHeader do request, exemplo
addRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");

 :arrow: <b>noCache()</b>
Um atalho para
addRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0")
addRequestHeader("Pragma", "no-cache")

 :!: A Classe mtw.response:

Métodos:

 :arrow: <b>getObject(index)</b>
 Retorna o objeto que esta no indice passado no parametro.
 começando por 0 (zero)
 Ex: se for passado um Map,
	Map&lt;String, String&gt; map = new LinkedHashMap&lt;String, String&gt;();
	map.put("primeiro", "Um");
	map.put("segundo", "Dois");
	map.put("terceiro", "Tres");

var map = getObject(1)    // retorna o segundo map
map.key        // segundo
map.value     // Dois

 :arrow: <b>getValue(key)</b>
Retorna o valor respectivo a chave passada, "Igual ao Map do Java".
Ex: se for passado um Map,
	Map&lt;String, String&gt; map = new LinkedHashMap&lt;String, String&gt;();
	map.put("primeiro", "Um");
	map.put("segundo", "Dois");
	map.put("terceiro", "Tres");

var map = getValue("terceiro")    // retorna o valor com chave "terceiro"
que equivale ao valor "Tres".

 :arrow: <b>size()</b>
Retorna o tamanho da lista de objetos.

 :arrow: <b>getString()</b>
Retorna uma simples String passada pela Action, ou conteúdo
de outras páginas.

 :arrow: <b>innerHTML(id)</b>
Substitui o conteúdo de um container.
resp.innerHTML("divId");

 :arrow: <b>replaceOptions(id);</b>
Remove e adiciona valores à combos Selects.
resp.replaceOptions("idSelect");

 :arrow: <b>setValues();</b>
  Atualiza os elementos com os valores encontrados no
  response, se utilizado um Map, a chave do map será
  o id do elemento e o valor será o value. em caso
  de um Bean, será usado como id a propriedade e como
  valor o valor da propriedade.
EX: resp.setValues();

Abaixo exemplos em meio a um contexto que facilitará a visualização
do funcionamento desses metodos.


Existem tambem alguns métodos "Estáticos":

 :arrow: <b>mtw.removeOptions("selectId");</b>
 Remove todas opções de um select
 
 :arrow: <b>mtw.addOptions("selectId", response);</b>
 Adiciona ao select com id especificado, os valores
 do response.
   

 :!: Executando um request:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;script type="text/javascript"&gt;
function getMap&#40;transport&#41; {
	var res = new mtw.response&#40;transport&#41;;

}

function doRequest&#40;&#41; {
	var req = new mtw.request&#40;&#41;;
	req.setUrl&#40;"TestAction.getMap.mtw"&#41;;
	req.onSuccess&#40;getMap&#41;;
	req.send&#40;&#41;;
}
&lt;/script&gt;
</pre>
		</div>
Ao chamar a função "doRequest()" ele envia para o servidor
a URL: TestAction.mtw e logo após o servidor enviar a resposta
ele chama a função especificado no onSuccess, enviando junto
o transport ajax.

Obs: "voce nem precisa saber oque é transport apenas passe-o
      para o construtor do mtw.response.

De agora em diante voce já pode utilizar os metodos da classe
mtw.response para recuperar os dados.


Agora um exemplo na pratica

Bean Pessoa:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class Pessoa implements Serializable {
	private String nome;
	private String sobrenome;
	private Integer idade;
	private Date nascimento;

	public Pessoa&#40;&#41; {
	}
	
	public Pessoa&#40;String nome, String sobrenome, Integer idade, Date nascimento&#41;{
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.idade = idade;
		this.nascimento = nascimento;
	}

	// getters and setter omitidos.
</pre>
		</div>
Os beans devem seguir o padrão JavaBeans, que tem que no mínimo
ter um <b>Construtor padrão sem argumentos, implementar Serializable e
possuir metodos setter e getters.</b>

Action TestAction:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class TestAction extends BaseAction {

	Pessoa pessoaBean = null;
	
	@Override
	public String execute&#40;&#41; throws Exception {
		throw new ActionException&#40;"Nothing here"&#41;;
	}

	public String getListBean&#40;&#41; {
		List&lt;Pessoa&gt; list = new ArrayList&lt;Pessoa&gt;&#40;&#41;;
		list.add&#40;new Pessoa&#40;"Joao", "Silva Filho", 5, new Date&#40;&#41;&#41;&#41;;
		list.add&#40;new Pessoa&#40;"Maria", "Bonita", 7, new Date&#40;&#41;&#41;&#41;;
		list.add&#40;new Pessoa&#40;"Mario", "Santos", 8, new Date&#40;&#41;&#41;&#41;;
		output.setValue&#40;AjaxConsequence.KEY, list&#41;;
		return SUCCESS;
	}

	public String getMap&#40;&#41; {
		Map&lt;String, String&gt; map = new LinkedHashMap&lt;String, String&gt;&#40;&#41;;
		map.put&#40;"primeiro", "Um"&#41;;
		map.put&#40;"segundo", "Dois"&#41;;
		map.put&#40;"terceiro", "Tres"&#41;;
		output.setValue&#40;AjaxConsequence.KEY, map&#41;;
		return SUCCESS;
	}

	public String getBean&#40;&#41; {
		String whatBean = input.getStringValue&#40;"whatBean"&#41;;
		Pessoa bean = new Pessoa&#40;&#41;;
		if &#40;whatBean.equals&#40;"robert"&#41;&#41; {
			bean.setNome&#40;"Robert"&#41;;
			bean.setSobrenome&#40;"Willian Gil"&#41;;
			bean.setIdade&#40;21&#41;;
			Calendar ca = Calendar.getInstance&#40;&#41;;
			ca.set&#40;1985, 11, 15&#41;;            // 15/12/1985
			bean.setNascimento&#40;ca.getTime&#40;&#41;&#41;;
		} else {
			bean.setNome&#40;"João"&#41;;
			bean.setSobrenome&#40;"Da Silva"&#41;;
		}
		output.setValue&#40;AjaxConsequence.KEY, bean&#41;;
		return SUCCESS;
	}
	
	public String sendBean&#40;&#41;{
		// get Bean from VOFilter and put it to response;
		output.setValue&#40;AjaxConsequence.KEY, pessoaBean&#41;;
		return SUCCESS;
	}

	public String getSimpleString&#40;&#41;{
		String value = input.getStringValue&#40;"value"&#41;;
		output.setValue&#40;AjaxConsequence.KEY, "Hello " + value&#41;;
		return SUCCESS;
	}

}
</pre>
		</div>

No ApplicationManager:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class ApplicationManager extends org.mentawai.core.ApplicationManager {
	
	@Override
	public void init&#40;&#41; {
		addGlobalFilter&#40;new InjectionFilter&#40;&#41;&#41;;
	}
	
	@Override
	public void loadActions&#40;&#41; {
		action&#40;TestAction.class&#41;
		.on&#40;SUCCESS, new AjaxConsequence&#40;new JSONGenericRenderer&#40;&#41;&#41;&#41;
		.filter&#40;new VOFilter&#40;Pessoa.class, "pessoaBean"&#41;&#41;;
	}
	
	@Override
	public void loadLocales&#40;&#41; {
		LocaleManager.add&#40;new Locale&#40;"pt", "BR"&#41;&#41;; 
	}

}
</pre>
		</div>
Observe que usei um VOFilter, para ilustrar que podemos passar
um bean instanciado e carregado com os valores vindos dos
forms com serializeForm, ou com addParameter da classe Javascript
mtw.request.

Obs: É muito importante carregar pelo menos um locale,
para que as conversões de data funcionem automaticamente sem problemas.


Com esta action podemos fazer varios exemplos como:
retornar uma String
retornar um MAP
retornar um Bean
retornar um List de beans.


Header JSP
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;head&gt;
&lt;mtw:ajaxConfig /&gt;
&lt;/head&gt;
</pre>
		</div>
isso carregará as libs necessarias para tudo funcionar.

 :!: <b>Trabalhando com MAP </b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;html&gt;

&lt;head&gt;
	&lt;mtw:ajaxConfig /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;script type="text/javascript"&gt;

// Fazendo o Request

function callAction&#40;&#41; {
	var call = new mtw.request&#40;&#41;;
	call.onSuccess&#40;handleMap&#41;;
	call.setUrl&#40;"TestAction.getMap.mtw"&#41;;
	call.useLoadingMessage&#40;"Carregando..."&#41;;
	call.send&#40;&#41;;
}


// Recebendo a Resposta

function handleMap&#40;transport&#41;{
	var response = new mtw.response&#40;transport&#41;;
	alert&#40;response.getObject&#40;2&#41;.key&#41;;
	alert&#40;response.getObject&#40;2&#41;.value&#41;;
	alert&#40;response.getValue&#40;"primeiro"&#41;&#41;;
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
		</div>
Ok, quando em algum lugar alguem chamar a função callAction, ele
fará a chamada para o servidor, que retornará o resultado
para a função "handleMap" juntamente com o transport, cujo é
passado no construtor da classe mtw.response na hora da
instanciação.

O primeiro alert mostrará:  terceiro
O segundo alert mostrará:   Tres
O terceiro alert mostrará:  Um


 :!:<b> Trabalhando com Bean</b>

Voces notarão que o processo do Request é simples
e parecido dependendo do que se precisa passar
para a action como parametros.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;html&gt;

&lt;head&gt;
	&lt;mtw:ajaxConfig /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;script type="text/javascript"&gt;

// Fazendo o Request

function callAction&#40;&#41; {
	var call = new mtw.request&#40;&#41;;
	call.onSuccess&#40;handleBean&#41;;
	call.addParameter&#40;"whatBean", "robert"&#41;;
	call.setUrl&#40;"TestAction.getBean.mtw"&#41;;
	call.useLoadingMessage&#40;"Loading..."&#41;;
	call.send&#40;&#41;;
}


// Recebendo a Resposta

function handleBean&#40;transport&#41;{
	var response = new mtw.response&#40;transport&#41;;
	alert&#40;response.getObject&#40;&#41;.nome&#41;;
	alert&#40;response.getObject&#40;&#41;.sobrenome&#41;;
	alert&#40;response.getObject&#40;&#41;.idade&#41;;
	alert&#40;response.getObject&#40;&#41;.nascimento&#41;;

        // Ou assim:
//        var pessoa = response.getObject&#40;&#41;;
//        alert&#40; pessoa.nome &#41;;
//        alert&#40; pessoa.sobrenome &#41;;
//        alert&#40; pessoa.idade &#41;;
//        alert&#40; pessoa.nascimento &#41;;
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
		</div>

Temos uma pequena mudança agora na função callAction
que é um addParameter, que enviará para a action
o atributo "whatBean" com valor "robert", esse valor
poderia vir de uma variavel, de um campo do html ou
qualquer outro lugar.

As seguintes Respostas São:

Primeiro alert:  Robert
Segundo alert:   Willian Gil
Terceiro alert:  21
Quarto alert:    15/12/1985

Repare tambem que não foi passado o indice para o metodo
getObject() , não é necessario pois temos apenas um bean.


  :!: Trabalhando com um <b>List de Beans</b>
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;html&gt;

&lt;head&gt;
	&lt;mtw:ajaxConfig /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;script type="text/javascript"&gt;

// Fazendo o Request

function callAction&#40;&#41; {
	var call = new mtw.request&#40;&#41;;
	call.onSuccess&#40;handleListBean&#41;;
	call.setUrl&#40;&quot;TestAction.getListBean.mtw&quot;&#41;;
	call.send&#40;&#41;;
}


// Recebendo a Resposta

function handleListBean&#40;transport&#41;{
	var response = new mtw.response&#40;transport&#41;;
	var pessoa = null;
	for&#40; var index = 0; index &lt; response.size&#40;&#41;; index++&#41; {
		pessoa = response.getObject&#40;index&#41;;
		msg = &quot;Nome: &quot; + pessoa.nome;
		msg += &quot;  Sobrenome: &quot; + pessoa.sobrenome;
               alert&#40;msg&#41;;
	}
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
		</div>

Para essa nossa action que tem 3 objetos na lista, será exibido
3 alerts com "Nome: xxxxx  Sobrenome: xxxxxx"

Como podem ver, funciona muito semelhante ao Map porem ao invés de usar
key e value para obter os valores, voce passa o nome dos atributos.

 :!: <b>Trabalhando com String</b>
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;html&gt;

&lt;head&gt;
	&lt;mtw:ajaxConfig /&gt;
&lt;/head&gt;

&lt;body&gt;

      &lt;input type="text" name="valor" id="valor" value="Write Here"&gt;
      &lt;div id="stringHere"&gt;&lt;/div&gt;
      
      &lt;input type="button" value="Go" onclick="getString&#40;&#41;;"&gt;

&lt;script type="text/javascript"&gt;

// Fazendo o Request e Response na mesma Função

function getString&#40;&#41;{
     var r = new mtw.request&#40;&#41;;
     r.setUrl&#40;"TestAction.getSimpleString.mtw"&#41;;
     r.onSuccess&#40;
         
            function&#40;trans&#41; {
                  var rq = new mtw.response&#40;trans&#41;;
	          $&#40;"stringHere"&#41;.innerHTML = rq.getString&#40;&#41;;
              }

     &#41;;
     r.addParameter&#40;"value", $&#40;"valor"&#41;.value&#41;;
     r.send&#40;&#41;;
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
		</div>
Ao Clicar no botão será feito o request passando como parametro o
valor do campo text com id "valor"
será retornar pelo servidor uma simples string que será capturada
com o getString e será jogada dentro do div com id "stringHere"

Obs: Voce pode retornar codigos html!  :wink: 

Tambem como exemplo podemos observar que podemos aninhas
as funções, a função que manipula o response esta dentro do proprio
onSuccess();


 :!: <b> Um exemplo de serialização de um Form</b>
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;form action="" id="formBean"&gt;
	Nome: &lt;input type="text" name="nome" value="Fulano"&gt;&lt;br&gt;
	Sobrenome: &lt;input type="text" name="sobrenome" value="Chapado"&gt;&lt;br&gt;
	Idade: &lt;input type="text" name="idade" value="20"&gt;&lt;br&gt;
	Nascimento: &lt;input type="text" name="nascimento" value="15/12/1985"&gt;&lt;br&gt;
&lt;/form&gt;
&lt;div id="formDivId"&gt;&lt;/div&gt;
&lt;script type="text/javascript"&gt;
function fillForm&#40;trans&#41;{
	var r = new mtw.response&#40;trans&#41;;
	var data = r.getObject&#40;&#41;;
	msg = "Nome: "+ data.nome;
	msg += "&lt;br&gt;Sobrenome: " + data.sobrenome;
	msg += "&lt;br&gt;Idade: "+ data.idade;
	msg += "&lt;br&gt;Nascimento: " + data.nascimento;
	document.getElementById&#40;"formDivId"&#41;.innerHTML = msg;
}

function sendBean&#40;&#41;{
	var r = new mtw.request&#40;&#41;;
	r.setUrl&#40;"TestAction.sendBean.mtw"&#41;;
	r.onSuccess&#40;fillForm&#41;;
	r.serializeForm&#40;"formBean"&#41;;
	r.send&#40;&#41;;
}
&lt;/script&gt;
&lt;input type="button" value="SendBean" onclick="sendBean&#40;&#41;;"&gt;
</pre>
		</div>

Ao clicar no botão, será chamada a função sendBean, que enviará a

URL: TestAction.sendBean.mtw?nome=Fulado&sobrenome=Chapado&idade=20&nascimento=15%2F12%2F1985

como percebem a url vai codificada com o padrao de urlEncode,
e a função fillForm irá inserir o codigo html gerado pelo javaScript no
container com id "formDivId" via innerHTML

 
 :!:  <b>Combo Dinâmico.</b>
 <span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 	&lt;script type="text/javascript"&gt;
			function requestSel&#40;&#41;{
				var r = new mtw.request&#40;&#41;;
				r.setUrl&#40;"TestAction.getMap.mtw"&#41;;
				r.onSuccess&#40;
					function &#40;trans&#41;{
					var response = new mtw.response&#40;trans&#41;;
					response.replaceOptions&#40;"sel"&#41;;
					}
				&#41;;
				r.useLoadingMessage&#40;&#41;;
				r.send&#40;&#41;;
			}
	&lt;/script&gt;
	&lt;select id="sel" name="sel"&gt;&lt;/select&gt;
	&lt;input type="button" value="Go" onclick="requestSel&#40;&#41;;"&gt;
	
 </pre>
		</div>

 :!:  <b>HTML Content</b>
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
		&lt;script type="text/javascript"&gt;
		function getHTML&#40;&#41;{
			var r = new mtw.request&#40;&#41;;
			r.setUrl&#40;"jsp/other.jsp"&#41;;
			r.onSuccess&#40;
				function&#40;data&#41;{
					var resp = new mtw.response&#40;data&#41;;
                                       resp.innerHTML&#40;"htmlHere"&#41;;
				}
			&#41;;
			r.send&#40;&#41;;
		}
		&lt;/script&gt;
		&lt;div id="htmlHere"&gt;&lt;/div&gt;
		&lt;br&gt;
		&lt;input type="button" value="Get" onclick="getHTML&#40;&#41;;"&gt;
</pre>
		</div>
Este código pega o código HTML da pagina jsp/other.jsp e insere
no div "htmlHere".
Obs: Pose-se passar por uma action normalmente.

 
 :!:  <b>Update Field</b>
 Este exemplo usa um Bean ou um Map para atualizar os campos.
 
 Bean Address
 <span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 public class Address implements Serializable {
 	private String country;
	private int state;
	private String city;

  //  Setter and Getter omitidos..
 }
 </pre>
		</div>
 
 Action AddressAction
 <span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 public class AddressAction extends BaseAction {
	
	public String getAddress&#40;&#41;{
		String mapOrBean = input.getStringValue&#40;"mapOrBean"&#41;;
		String cep = input.getStringValue&#40;"cep"&#41;;
		if&#40;cep == null&#41; cep = "null";
		if&#40;mapOrBean.equalsIgnoreCase&#40;"map"&#41;&#41;{
			output.setValue&#40;AjaxConsequence.KEY, getMap&#40;cep&#41;&#41;;
		} else {
			output.setValue&#40;AjaxConsequence.KEY, getBean&#40;cep&#41;&#41;;
		}
		
		return SUCCESS;
	}
	
	private Map&lt;String, String&gt; getMap&#40;String cep&#41;{
		Map&lt;String, String&gt; map = new LinkedHashMap&lt;String, String&gt;&#40;&#41;;
		if&#40;cep.equalsIgnoreCase&#40;"11.111-111"&#41;&#41;{
			map.put&#40;"country", "Brasil / MAP"&#41;;
			map.put&#40;"state", "1"&#41;;
			map.put&#40;"city", "Sorriso"&#41;;
			map.put&#40;"cor", "azul"&#41;;
		} else if&#40;cep.equalsIgnoreCase&#40;"22.222-222"&#41;&#41;{
			map.put&#40;"country", "Brasil / MAP"&#41;;
			map.put&#40;"state", "2"&#41;;
			map.put&#40;"city", "São Paulo"&#41;;
			map.put&#40;"cor", "vermelho"&#41;;
		} else {
			map.put&#40;"country", "Não Encontrado! / MAP"&#41;;
			map.put&#40;"state", "0"&#41;;
			map.put&#40;"city", "Não Encontrado"&#41;;
		}
		return map;
	}
	
	private Address getBean&#40;String cep&#41;{
		Address addr = new Address&#40;&#41;;
		
		if&#40;cep.equalsIgnoreCase&#40;"11.111-111"&#41;&#41;{
			addr.setCountry&#40;"Brasil / BEAN"&#41;;
			addr.setState&#40;1&#41;;
			addr.setCity&#40;"Sorriso"&#41;;
			
		} else if&#40;cep.equalsIgnoreCase&#40;"22.222-222"&#41;&#41;{
			addr.setCountry&#40;"Brasil / BEAN"&#41;;
			addr.setState&#40;2&#41;;
			addr.setCity&#40;"São Paulo"&#41;;
			
		} else {
			addr.setCountry&#40;"Não Encontrado / BEAN"&#41;;
			addr.setState&#40;0&#41;;
			addr.setCity&#40;"Não Encontrado"&#41;;
		}
		return addr;
	}

}
 </pre>
		</div>
 Esta Action apenas pega dois parametros passados pela request ajax,
 que é o "mapOrBean" para saber se queremos no response um
 Bean ou Map, e conforme o valor do parametro é colocado no output
 um Map, ou um Bean populado e o cep.
 
 ApplicationManager:
 <span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 action&#40;AddressAction.class&#41;
     .on&#40;SUCCESS, new AjaxConsequence&#40;new JSONGenericRenderer&#40;&#41;&#41;&#41;;

//   Super Tiny Style
//
//  action&#40;AddressAction.class&#41;.ajaxOK&#40;new JSONGenericRenderer&#40;&#41;&#41;;
 </pre>
		</div>
 
 Jsp:
 <span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 	&lt;fieldset&gt;
		&lt;legend&gt;Update Field&lt;/legend&gt;
		&lt;script type="text/javascript"&gt;
		function updateField&#40;&#41;{
			var r = new mtw.request&#40;&#41;;
			r.setUrl&#40;"AddressAction.getAddress.mtw"&#41;;
			r.onSuccess&#40;
				function&#40;data&#41;{
					new mtw.response&#40;data&#41;.setValues&#40;&#41;;
				}
			&#41;;
			r.addParameter&#40;"mapOrBean", mtw.getValue&#40;"mapOrBean"&#41;&#41;;
			r.addParameter&#40;"cep", mtw.getValue&#40;"cep"&#41;&#41;;
			r.send&#40;&#41;;
		}
		&lt;/script&gt;
		&lt;table&gt;
			&lt;tr&gt;
				&lt;td&gt; &lt;input type="radio" name="mapOrBean" value="map"&gt;Com Map &lt;/td&gt;
				&lt;td&gt; &lt;input type="radio" name="mapOrBean" value="bean" checked="checked"&gt;Com Bean &lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;Td&gt;Cep:&lt;/Td&gt;
				&lt;td&gt;&lt;mtw:inputMask maskDefined="cep" name="cep" id="cep"/&gt; &nbsp;&nbsp;&nbsp; 11.111-111 / 22.222-222&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;Pais&lt;/td&gt;
				&lt;td&gt;&lt;input type="text" id="country" name="country"&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;Estado:&lt;/td&gt;
				&lt;td&gt;
					&lt;select id="state" name="state"&gt;
						&lt;option value="0"&gt;Não Encontrado&lt;/option&gt;
						&lt;option value="1"&gt;Mato Grosso&lt;/option&gt;
						&lt;option value="2"&gt;São Paulo&lt;/option&gt;
					&lt;/select&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;Cidade:&lt;/td&gt;
				&lt;td&gt;
					&lt;input type="radio" name="city" value="Sorriso"&gt;Sorriso
					&lt;input type="radio" name="city" value="São Paulo"&gt; São Paulo
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;input type="checkbox" name="cor" value="azul"&gt;Azul&lt;/td&gt;
				&lt;td&gt;&lt;input type="checkbox" name="cor" value="vermelho"&gt;Vermelho&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;input type="button" value="Update" onclick="updateField&#40;&#41;;"&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;
	&lt;/fieldset&gt;
 </pre>
		</div>
 
 Estes exemplos e outros são encontrados no war de exemplo
com os fontes, e podem ser baixado <a href="http://www.mentaframework.org/files/MentaAjax.zip" target="_new" rel="nofollow">AQUI</a>.

Jars requeridos.
ezmorph e json-lib-0.8 podem ser baixados <a href="https://mentaframework.svn.sourceforge.net/svnroot/mentaframework/mentawai/lib/" target="_new" rel="nofollow">Aqui</a>

Bom é isso pessoal qualquer duvida, postem no <a href="http://forum.mentaframework.org" target="_new" rel="nofollow">fórum Mentawai.</a>]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1418.page#11419</guid>
				<link>http://forum.mentaframework.org/posts/list/1418.page#11419</link>
				<pubDate><![CDATA[Tue, 7 Aug 2007 01:31:08]]> GMT</pubDate>
				<author><![CDATA[ robertwgil]]></author>
			</item>
			<item>
				<title>Re:33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!</title>
				<description><![CDATA[ Parabéns Robert.... ótimo trabalho... dá gosto de ver.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1418.page#15150</guid>
				<link>http://forum.mentaframework.org/posts/list/1418.page#15150</link>
				<pubDate><![CDATA[Tue, 15 Apr 2008 10:55:55]]> GMT</pubDate>
				<author><![CDATA[ Lupos]]></author>
			</item>
			<item>
				<title>Re:33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!</title>
				<description><![CDATA[ bom dia amigos!

  sou novo em programação java, e gosto muito do mentawai, pelas facilidades que ele tem.

  Estou tentando usar o MentaAjax, e peguei os exemplos aqui deste topico, e funcionou perfeitamente, sem problemas!

  Porém, quando eu substituo o arquivo mentawai.jar do exemplo, pelo mentawai.jar mais atual (o 1.14.1) os exemplos não funcionam mais!!  

  Estava querendo usar o mentawai.jar mais atual, por questão de novas funcionalidades, correção de bugs, etc. o Mentawai 1.14.1 não tem suporte para o mentaAjax?? 

  O interessante é que não da nenhuma mensagem de erro, simplesmente não funciona! Qualquer exemplo do mentaAjax que você tentar rodar usando o mentawai.jar mais atual não funciona, e não da nenhuma mensagem de erro e nem nada.

  Alguém ja conseguiu usar o mentaAjax no mentawai mais atual?? E se conseguiu, como fez??

  muito obrigado!!

]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1418.page#17291</guid>
				<link>http://forum.mentaframework.org/posts/list/1418.page#17291</link>
				<pubDate><![CDATA[Sat, 25 Jul 2009 09:57:14]]> GMT</pubDate>
				<author><![CDATA[ marcelow22]]></author>
			</item>
			<item>
				<title>Re:33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!</title>
				<description><![CDATA[ Que eu me lembre houve algumas mudanças..

Abre um post em DUVIDAS GERAIS sobre o assunto e post o codigo para que possam ajudar.

acho que vc deverá substituir mtw.getValue por isto mtw.util.getValue. ]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1418.page#17308</guid>
				<link>http://forum.mentaframework.org/posts/list/1418.page#17308</link>
				<pubDate><![CDATA[Tue, 28 Jul 2009 07:32:35]]> GMT</pubDate>
				<author><![CDATA[ IceW0lf]]></author>
			</item>
			<item>
				<title>33) MentaAjax: Framework em JS do Mentawai para trabalhar facilmente com Ajax no client-side!</title>
				<description><![CDATA[ Boa tarde a todos.

Bom estou começando a converter um sistema legado para o Mentawai, gostaria de saber se na Action tem como "forçar" um erro para que a função onError seja chamada.

Edit: Acabei de achar a resposta:
http://forum.mentaframework.org/posts/list/1873.page
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1418.page#65600</guid>
				<link>http://forum.mentaframework.org/posts/list/1418.page#65600</link>
				<pubDate><![CDATA[Tue, 13 Dec 2011 10:12:22]]> GMT</pubDate>
				<author><![CDATA[ Rubem Vieira]]></author>
			</item>
	</channel>
</rss>
