Pessoal, bom dia!
Comecei a usar Flex a mais ou menos um mês e estou muito satisfeito com a ferramenta. Para fazer o acesso aos dados, estou utilizando WebService´s, e para contruílos esotu utilizando a combinação Eclipse + WTP + Plugin TomCat. Está tudo funcionando muito bem.
Minha difuculdade agora está em chamar um método onde o argumento é um Array de ComplexType, ou seja, uma classe que criei para carregar meus dados.
Vamos aos códigos. Inicialmente, para testar, fiz um método onde o argumento é apenas um complexType, dessa forma:
public Projeto updateProjetos(Projeto projeto) {
System.out.println(projeto);
return projeto;
}
E aqui minha classe Projeto:
public class Projeto {
public String projeto;
public String coordenador;
public String area;
}
Para chamar esse serviço, fiz o seguinte codigo no Flex:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.utils.ArrayUtil;
import mx.collections.ArrayCollection;
private function teste():void {
var projetoArray:Array = new Array();
var projeto:Projeto = new Projeto();
projeto.projeto = "Projeto A";
projeto.coordenador = "Fulano";
projeto.area = "XYZ";
wsTeste.updateProjetos( projeto );
}
]]>
</mx:Script>
<mx:WebService
id="wsTeste"
wsdl="http://localhost:8080/Teste/wsdl/Teste.wsdl"
showBusyCursor="true">
<mx:operation name="updateProjetos" >
</mx:operation>
</mx:WebService>
<mx:Button x="10" y="10" label="Button" click="teste();"/>
<mx:DataGrid x="10" y="40" dataProvider="{wsTeste.updateProjetos.lastResult}">
<mx:columns>
<mx:DataGridColumn headerText="Projeto" dataField="projeto"/>
<mx:DataGridColumn headerText="Coordenador" dataField="coordenador"/>
<mx:DataGridColumn headerText="Area" dataField="area"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
E também clirei no Flex uma ActionScript Class correspondente a classe projeto do Java:
package
{
public class Projeto
{
public var projeto:String;
public var coordenador:String;
public var area:String;
}
}
Esse código acima funciona corretamente. Uma beleza!!!
Mas minha necessidade é enviar um array da classe Projeto pro serviço atualizar, dessa forma:
public Projeto[] updateProjetos(Projeto[] listaProjetos) {
System.out.println(listaProjetos);
return listaProjetos;
}
E o Flex alterei pra ficar da seguinte forma:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.utils.ArrayUtil;
import mx.collections.ArrayCollection;
private function teste():void {
var projetoArray:Array = new Array();
for( var i:Number = 0; i < 5; i++ ) {
var projeto:Projeto = new Projeto();
projeto.projeto = "Projeto A";
projeto.coordenador = "Fulano";
projeto.area = "XYZ";
projetoArray.push( projeto );
}
wsTeste.updateProjetos( projetoArray );
}
]]>
</mx:Script>
<mx:WebService
id="wsTeste"
wsdl="http://localhost:8080/Teste/wsdl/Teste.wsdl"
showBusyCursor="true">
<mx:operation name="updateProjetos" >
</mx:operation>
</mx:WebService>
<mx:Button x="10" y="10" label="Button" click="teste();"/>
<mx:DataGrid x="10" y="40" dataProvider="{wsTeste.updateProjetos.lastResult}">
<mx:columns>
<mx:DataGridColumn headerText="Projeto" dataField="projeto"/>
<mx:DataGridColumn headerText="Coordenador" dataField="coordenador"/>
<mx:DataGridColumn headerText="Area" dataField="area"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
Porém quando chamo o serviço, ele recebe nulo, ou seja, o argumento listaProjetos vem como 'null'.
Alguem tem uma ideia de algo que possa estar fazendo de errado????
Já esotu começando a perder as esperanças....
Ah, peguei o seguinte código como exemplo:
[url]http://www.themidnightcoders.com/blog/2007/03/flex-remoteobject-vs-webservice.html[/url]
Muito obrigado pela juda! Valeu! Abraços...
