Enviar array bidimensional do Java para o Flex

0 respostas
xcah

Olá!

Estou usando o Blazeds para conectar o Java com o Flex, o que eu estou fazendo é pegar os dados do Flex e passar para uma matriz no Java, e pegar essa Matriz e enviar para o Flex para então usá-la em um DataGrid (que é o que não está dando certo!). (sei que dá meio que uma volta, mas estou fazendo isso para aprender a conexão etc, mais como teste…)
Creio que a parte de passar os dados para um Array no Java está correta…
Vou colocar o código aqui, se alguém puder dar uma olhada e me ajudar, agradeço!
(Lembrando que é um teste e o código pode estar meio bagunçadinho, mas comentei nele)

Java:

package oi;

public class Ola {
	
	String m[][] = new String[90][4]; // matriz bidimensional a ser usada
	String anome, acurso, aue, arm; // variáveis a serem recebidas como parâmetros do flex para serem passadas na matriz
	int i=0,j=0,num; // variáveis de loops etc
	
	public String oiJava (String mnome, String mcurso, String mue, String mrm) // método de teste, apenas retorna o enviado, desconsiderá-lo
	{
		//String str = teti(mnome, mcurso, mue, mrm);
		return "Oi "+ mnome + " " + mcurso + " " + mue + " " + mrm ;
					
	}
	
	public String teti(String nome, String curso, String ue, String rm) // método para guardar os dados enviados pelo flex
	{																		// numa matriz m[90][4]
		//j=0; i=0;
		if (num==2) // verificação se  executou alguma vez
		{	i++;  }  

		m[i][j]=nome;
		m[i][j+1]=curso;
		m[i][j+2]=ue;
		m[i][j+3]=rm;
		
		num=2; // se  executou uma vez verificará esta variável para somar ao i e adicionar outro registro
		String envia = " " + m[i][0]+m[i][1]+m[i][2]+m[i][3]+ "!";  // aqui ele apenas retornará ao flex para ser exibido em um 
		return envia;													// alert... apenas teste... 
				
	}
	
	public String[][] getdata() // método que enviará o array para o flex
	{	
		return m;
	}

}

Flex:

<?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 -->
		<mx:RemoteObject id="ro" destination="olaService" result="ro_resultHandler(event);" fault="ro_faultHandler(event);"/>
		<s:RemoteObject id="rochama" destination="olaService" fault="ro_faultHandler(event);" />
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import flash.display.BlendMode;
			import flash.events.*;
			import flash.net.FileReference;
			import flash.net.URLRequest;
			import flash.net.navigateToURL;
			import flash.system.*;
			import flash.system.fscommand;
			import flash.utils.*;
			
			import mx.collections.*;
			import mx.collections.ArrayCollection;
			import mx.controls.*;
			import mx.controls.Alert;
			import mx.controls.Button;
			import mx.controls.TextInput;
			import mx.core.*;
			import mx.events.*;
			import mx.events.MenuEvent;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.utils.UIDUtil;
			
			[bindable] public var colarray:ArrayCollection = new ArrayCollection; // array que supostamente deve receber o array
																				// do java, não sei se está certo	
			private function OlaMundo():void 
			{
				var name:String = txtNome.text;
				var cur:String = txtCurso.text;
				var uni:String = txtUE.text;
				var regm:String = txtRM.text;
				ro.teti.send(name,cur,uni,regm); // chamará a função do java através do RemoteObject que guarda os dados
			}
			
			private function chama():void  // pegar o array bidimensional do java e passar para um ArrayCollection supostamente
			{									// para passar para um DataGrid ... não dá certo... [verificar 
																		// as propriedades do DataGrid também... ] 
				var ar:Array = rochama.getdata();
				//var a:ArrayList = new ArrayList(rochama.getdata());
				colarray.addItem(ar);
				//colarray = rochama.getdata();
				colarray.refresh();
				dtgrid.dataProvider = colarray; 
				dtgrid.enabled = true;
				dtgrid.visible = true;
				
			}
			
			protected function ro_resultHandler(event:ResultEvent):void {
				// TODO Auto-generated method stub
				Alert.show("res: "+event.result.toString());
			}
			protected function ro_faultHandler(event:FaultEvent):void {
				// TODO Auto-generated method stub
				Alert.show("Error : "+event.toString())
			}
			protected function txtRM_focusInHandler(event:FocusEvent):void
			{
				// TODO Auto-generated method stub
				txtRM.text="";
			}


			protected function txtNome_focusInHandler(event:FocusEvent):void
			{
				// TODO Auto-generated method stub
				txtNome.text = "";
			}


			protected function txtUE_focusInHandler(event:FocusEvent):void
			{
				// TODO Auto-generated method stub
				txtUE.text="";
			}


			protected function txtCurso_focusInHandler(event:FocusEvent):void
			{
				// TODO Auto-generated method stub
				txtCurso.text = "";
			}

		]]>
	</fx:Script>
	<s:Button x="339" y="111" label="OlaJava" click="OlaMundo();"/>
	<s:Button x="573" y="111" label="Grid" id="btngrid" click="chama();"/>
	<s:TextInput x="143" y="20" id="txtNome" text="Digite Nome" focusIn="txtNome_focusInHandler(event)"/>
	<s:TextInput x="143" y="50" id="txtCurso" text="Digite Curso" focusIn="txtCurso_focusInHandler(event)"/>
	<s:TextInput x="143" y="80" id="txtUE" text="Digite Unidade Escolar" focusIn="txtUE_focusInHandler(event)"/>
	<s:TextInput x="143" y="110" id="txtRM" focusIn="txtRM_focusInHandler(event)" text="Digite RM"/>
	<mx:DataGrid x="138" y="199" width="437" height="258" id="dtgrid" enabled="false" visible="false">
		<mx:columns>
			<mx:DataGridColumn headerText="Nome" dataField="col1"/>
			<mx:DataGridColumn headerText="Curso" dataField="col2"/>
			<mx:DataGridColumn headerText="UE" dataField="col3"/>
			<mx:DataGridColumn headerText="RM" dataField="col3"/>
		</mx:columns>
	</mx:DataGrid>
</s:Application>

Deu pra entender?

Grata!

Criado 28 de março de 2011
Respostas 0
Participantes 1