Como manipular dados da resposta dos serviços? [RESOLVIDO]

4 respostas
brunorota

Olá galera

Estou usando o Eclipse com o plugin do flex 4 + o blazeDS

Eu criei um serviço com o wizard do data/services, testei o serviço com a ferramenta certinho e está funcionando

no index.mxml eu criei um botão e no evento onclick dele eu chamei o serviço.

Agora eu gostaria de capturar o dado do serviço que é um método que retorna uma String.

Não sei se fui muito claro mais vou postar o código do index.mxml aqui

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:services="services.*">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			
			protected function btnSay_clickHandler(event:MouseEvent):void
			{
				//Meu método do serviço sayHello() retorna uma String;
				sayHelloResult.token = helloWorldService.sayHello();
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<s:CallResponder id="sayHelloResult"/>
		<services:HelloWorldService id="helloWorldService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<s:Panel x="76" y="59" width="250" height="200">
		<s:Button x="81" y="68" label="Say" id="btnSay" click="btnSay_clickHandler(event)"/>
	</s:Panel>
</s:Application>

Eu só quero que quando ao clicar no botão apareça a mensagem na tela com o retorno do serviço

Se alguem puder me ajudar

Ficarei grato

Atenciosamente

4 Respostas

davidbuzatto

Vc tem que tratar o resultEvent. É nele que o resultado vai ser obtido.
Outra coisa, da forma que você vez, me parece que você está usando web services. Estou certo?

[]´s

brunorota

Opa

Não é por web service não, eu fiz pelo wizard do plugin do eclipse e escolhi pra fazer pelo blazeDS o serviço

Olha

Aproveitando me explica fazendo favor exemplo esse aqui que eu peguei e funcionou

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<s:RemoteObject
			id="helloWorld"
			destination="helloWorldService"
			showBusyCursor="true"
			fault="onFault(event)">
			<mx:method name="chamarHelloWorld" result="onResult(event)"/> // Essa linha faz oq?
		</s:RemoteObject>
	</fx:Declarations>
	
	<s:Button click="onButtonClick()" label="Chamar Hello World" />
	
	<fx:Script>
		<![CDATA[
			
			import mx.messaging.channels.AMFChannel;
			import mx.messaging.Channel;
			import mx.messaging.ChannelSet;
			import mx.rpc.events.FaultEvent;
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			
			private function onButtonClick():void{
				
				helloWorld.chamarHelloWorld();
				
			}
			
			private function onResult(event:ResultEvent):void{
				
				Alert.show( event.result as String );
				
			}
			
			private function onFault(event:FaultEvent):void{
				
				Alert.show( "Deu erro, temos que verificar o que aconteceu" );
				
			}
			
		]]>
	</fx:Script>
</s:Application>

Como eu faço pra adicionar o resultado em uma variável String em vez de imprimir na tela?

Att.

davidbuzatto

Oi Bruno,
Vou comentar seu código.
Acho que já postei o link do meu blog para vc.
Lá tem um exemplo completo e está tudo explicadinho.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->

		<!-- cria um objeto remoto -->
		<s:RemoteObject

			<!-- identificador do objeto remoto. é como um nome de variável. é por ele que você vai invocar os métodos declarados -->
			id="helloWorld"

			<!-- id definido no serviço (configurado no remoting-config.xml) -->
			destination="helloWorldService"

			<!-- durante a execução de algum método do serviço, mostre o cursor de ocupado (um relógio pequeno)-->
			showBusyCursor="true"

			<!-- se der algum problema (fault) execute o método onFault. você pode definir o faultEvent em cada método tbm -->
			fault="onFault(event)">

			<!-- cada método que estiver dentro da classe do serviço deve ser declarado usando a tag <mx:method>
			nela vc define o nome do método (o mesmo nome que está na classe e registra um ouvinte para o evento onResult
			que trata o resultado caso o método remoto seja executado corretamente -->
			<mx:method name="chamarHelloWorld" result="onResult(event)"/> // Essa linha faz oq?
		</s:RemoteObject>
	</fx:Declarations>
	
	<s:Button click="onButtonClick()" label="Chamar Hello World" />
	
	<fx:Script>
		<![CDATA[
			
			import mx.messaging.channels.AMFChannel;
			import mx.messaging.Channel;
			import mx.messaging.ChannelSet;
			import mx.rpc.events.FaultEvent;
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			
			// crie uma variável aqui, do tipo String, p/ armazenar o resultado do seu serviço
			private var resultado: String;

			private function onButtonClick():void{
				
				helloWorld.chamarHelloWorld();
				
			}
			
			private function onResult(event:ResultEvent):void{
				
				Alert.show( event.result as String );

				// armazena o resultado na variável
				resultado = event.result as String;
				
			}
			
			private function onFault(event:FaultEvent):void{
				
				Alert.show( "Deu erro, temos que verificar o que aconteceu" );
				
			}
			
		]]>
	</fx:Script>
</s:Application>

[]´s

brunorota

Opa david

Valew mesmo

Me ajudou muito

Vou ficar fuçando aqui agora hehe

Depois tenho q aprender como eu passo objetos criados para os metodos java

Obrigado

Até +

Criado 27 de agosto de 2010
Ultima resposta 27 de ago. de 2010
Respostas 4
Participantes 2