Como exibir o Alert no ActionScript somente após ter garantido transação pelo Java? Ajudem-me!

6 respostas
lessandronp

Olá pessoal, conforme mencionei no assunto, estou com esse devido problema, mencionado em outro tópico do Fórum.
Para não replicar segue o link:
http://www.guj.com.br/posts/list/142986.java

Agradeço desde já pela atenção,
Att,
Lessandro Notaroberto Pyrâmides

6 Respostas

Andre_Brito

Opa.

Tenta não criar 2 tópicos com o mesmo assunto (e em partes diferentes). Não li o seu código, mas pelo título, posso dizer que você quer exibir um Alert se o contato foi inserido com sucesso.

Bom, preciso fazer algumas perguntas. Você está usando RemoteObject? Se sim, você deve, dentro do RemoteObject que é o DAO, declarar um método (que deve ter o mesmo nome do método que fica no DAO). Aí, no atributo do método (ou seja, do mx:method) você configura o fault (que é o que vai acontecer se der erro) e o result (que é o que vai acontecer quando der certo - é aqui que vai o método com Alert). Algo assim:
<mx:RemoteObject id="roDao" destination="pampampam" showBusyCursor="true">
    
    <mx:method name="nomeDoMetodoDoDaoSemParenteses" fault="faultHandler(event)" result="inseriuOkHandler(event)"/>

</mx:RemoteObject>
Aí, seu AS ficaria assim:
private function inseriuOkHandler(event : ResultEvent) : void
{
    Alert.show("Deu certo!", "Mensagem no Alert!");
}

Claro que este é só um exemplo... Você deveria implementar o método faultHandler (com um novo nome também) e configurar as coisas de forma correta (como a destination).

lessandronp

Isso André. Estou utilizando RemoteObject. Porém criei uma camada entre o DAO e a visão, o Service que faz o trabalho de um controlador.
Meu MXML:

&lt;mx:RemoteObject id="remoteObject" fault="onFault(event)" destination="contatoService"&gt;
    	&lt;mx:method name="retornaContatos" result="onResult(event);" fault="onFault(event);"/&gt;
        &lt;mx:method name="insereContato" result="onResultData(event);" fault="onFault(event);"/&gt;
        &lt;mx:method name="removeContato" result="onResultData(event);" fault="onFault(event);"/&gt;
        &lt;mx:method name="atualizaContato" result="onResultData(event);" fault="onFault(event);"/&gt;
	&lt;/mx:RemoteObject&gt;

meu ActionScript:

import br.com.contato.entity.Contato;
    
    import mx.controls.Alert;
    import mx.events.ListEvent;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
   
    public function init():void {
         dg.addEventListener(ListEvent.CHANGE,carregaContatos);
    }
   
    public function onResult(re:ResultEvent):void {
        var data:Object = re.message.body;
        dg.dataProvider = data;
    }
   
    public function onFault(fault:FaultEvent):void {
        trace("Code: "+fault.fault.faultCode);
        trace("Detail: "+fault.fault.faultDetail);
        trace("String: "+fault.fault.faultString);
    }
   
    public function insereContato():void {
        var contato:Contato = new Contato();
        contato.nome = txtNome.text;
        contato.email = txtEmail.text;
        remoteObject.insereContato(contato);
        txtNome.text = "";
        txtEmail.text = "";
        txtNome.setFocus();
        txtNome.focusManager.showFocus();
    }
   
    public function onResultData(re:ResultEvent):void {
        remoteObject.retornaContatos();
    }
   
    public function removeContato():void {
        if(dg.selectedItem != null) {
            var contato:Contato = new Contato();
            contato.id = dg.selectedItem.id;
            remoteObject.excluiContato(contato);
        }
        else {
            Alert.show("Selecione um item da tabela!!!");
        }
    }
   
    public function carregaContatos(evt:ListEvent):void {
        txtNome.text = dg.selectedItem.nome;
        txtEmail.text = dg.selectedItem.email;
    }
   
    public function atualizaContato():void {
        if(dg.selectedItem != null) {
            var contato:Contato = new Contato();
            contato.id = dg.selectedItem.id;
            contato.nome = txtNome.text;
            contato.email = txtEmail.text;
            remoteObject.alteraContato(contato);
        }
        else {
            Alert.show("Selecione um item da tabela!!!");
        }
    }

Minha classe Java:

package br.com.contato.service;
import java.util.List;
import br.com.contato.dao.ContatoDAO;
import br.com.contato.entity.Contato;

public class ContatoService {
	
	public boolean insereContato(Contato contato) {
		try {
			ContatoDAO daoContato = new ContatoDAO();
			daoContato.salvar(contato);
			return true;
		}
		catch (Exception e) {
			return false;
		}
	}

	public boolean alteraContato(Contato contato) {
		boolean condicao = true;
		try {
			ContatoDAO daoContato = new ContatoDAO();
			daoContato.atualizar(contato);
		}
		catch (Exception e) {
			condicao = false;
		}
		return condicao;
	}

	public boolean excluiContato(Contato contato) {
		boolean condicao = true;
		try {
			ContatoDAO daoContato = new ContatoDAO();
			daoContato.remover(contato);
		}
		catch (Exception e) {
			condicao = false;
		}
		return condicao;
	}
	
	public List&lt;Contato&gt; retornaContatos() {
		List&lt;Contato&gt; contatos = null;
		try {
			ContatoDAO daoContato = new ContatoDAO();
			contatos = daoContato.recuperaContatos();
		}
		catch (Exception e) {
		}
		return contatos;
	}
}

Agradeço desde já,
Att,
Lessandro

Andre_Brito

Então…
Nos results, você tem duas opções: ou colocar, pra cada result, um método handler; ou deixar 1 e lidar com algum propriedade do objeto event que vem por parâmetro para saber o que aconteceu (se foi feita exclusão, inclusão ou coisa e tal). Então, por exemplo, no seu method insereContato, você coloca um handler, por exemplo, inserirContatoHandler(event). No ActionScript, chama o Alert com o show, dizendo que deu tudo certo.

lessandronp

Olá André, bom dia.
Saquei. E se eu quisesse fazer um método genérico para capturar os eventos, como eu saberia se foi chamado inclusao, consulta ou alteração para dar o Alert?
Abs,
Obrigado,
Lessandro

Andre_Brito

Deve ter alguma propriedade de ResultEvent que você consiga identificar isso. Eu uso nomes de método diferente.

Bruno_Sales

Fica como dica: Não tente ser “genérico” em lugares nos quais você não necessita ser.

Nesse caso, ter um result genérico para diferentes métodos só aumentaria desnecessariamente a complexidade do seu código. O seu “genérico”, provavelmente seria um método com um monte de ifs/case dentro para ver se a chamada veio de tal método, então faça tal coisa. É muito mais simples e limpo fazer 10 métodos diferentes, como, trataResultadoDePesquisa(), trataResultadoDeExclusao(). Assim, cada método faz sua determinada função, seu código fica facilmente legível, e você não tem que se preocupar com tornar algo “genérico”.

Criado 29 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 6
Participantes 3