logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Mar 25

ItemRenderer, Image, DataGrid Flex

Escrito por Felipe Borella em 1, 4, 6, Adobe, app, AR, back, BI, Bindable, break, case, código, collection, control, Controls, dados, DataGrid, DataProvider, Download, Flex, fonte, for, function, ide, IE, image, itemRenderer, layout, mudanças, MXML, O, on, processo, pt, RIA, Ria’s Geral, tag, TAT, UI, XML, XP @ 03 25th, 2010 | via http://www.fborella.com.br/blog/ | Sem comentários
Felipe Borella
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Então ja que estamos com tempo vou publicar algo que precisei fazer ( algo tipo tramitação de processos etc ) aonde podem variar o status ( ) . Vamos ao código que me explico mais facil lembrando que chegando em casa vou colocar os fontes disponiveis e inclusive colocar aqui para rodar a aplicação.

xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	width="100%" height="200" backgroundColor="#333333">
	<mx:Script>
		[CDATA[
			import mx.collections.ArrayCollection;
			/*
			 * A = bolinha verde
			 * B = bolinha vermelha
			 * c - bolinha azul
			 * G = default
			 */
            [Bindable]
            private var initDG:ArrayCollection = new ArrayCollection([
                {nome:'Felipe', sobrenome:'Borella', status: 'A'},
                {nome:'Lucas', sobrenome:'Catani', status: 'B'},
                {nome:'Joao', sobrenome:'Silva', status: 'C'},
                {nome:'Julio', sobrenome:'Borella', status: 'G'},
                {nome:'Diego', sobrenome:'Mangoni', status: 'A'}
            ]);
?
		]]>
	mx:Script>
	<mx:DataGrid id="dgDados" dataProvider="{initDG}" width="100%">
		<mx:columns>
			<mx:DataGridColumn headerText="Nome" dataField="nome" width="100"/>
			<mx:DataGridColumn headerText="Sobrenome" dataField="sobrenome" width="100"/>
			<mx:DataGridColumn headerText="Status" dataField="status" width="50"/>
			<mx:DataGridColumn headerText="Permissao" width="50">
				<mx:itemRenderer>
					<mx:Component>
			            <mx:Image horizontalAlign="center" width="24" height="24"
			            		source="{imagem.source}" creationComplete="alteraImagem();">
						<mx:Script>
							[CDATA[
								import mx.controls.Image;
								[Bindable]
								public var imagem:Image = new Image();
?
								public function alteraImagem():void
								{
									switch (data.status)
									{
										case 'A':
											imagem.source='nav_plain_green.png';
											break;
?
										case 'B':
											imagem.source='nav_plain_red.png';
											break;
?
										case 'C':
											imagem.source='nav_plain_blue.png';
											break;
										default:
											imagem.source='nav_plain_blue.png';
									}
								}
							]]>
						mx:Script>
			            mx:Image>
			        mx:Component>
			    mx:itemRenderer>
			mx:DataGridColumn>
		mx:columns>
	mx:DataGrid>
mx:Application>
 							]]>

fiz um Switch para comparar o que esta no status do arrayCollection e conforme o status ele troca a cor das bolinhas. Use sua criatividade melhore e se usar comente.

download aqui

ps – (fiz algumas mudanças mas a logica permanece a mesma)

Abraço!
Felipe!

Mar 25

Janelas MDI Window no Flex

Escrito por Luiz Tarabal em Adobe, Flex, RIA, Ria’s Geral @ 03 25th, 2010 | via http://luiztarabal.com.br/ | Sem comentários
Luiz Tarabal
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal,  precisei utilizar MDI Window em um software que estou trabalhando atualmente e fiquei surpreso com a qualidade e organização dos documentos em múltiplas janelas, mas o que é MDI mesmo?

‘Uma interface de documentos múltiplos (ou MDI, acrônimo para multiple document interface) é um método de organização de aplicações gráficas em janelas que residem em uma única janela, a janela principal da aplicação. A única exceção são possíveis janelas modais da aplicação’ – Wikipédia.

Resumindo, você trabalha com documentos (aplicações) abertos em múltiplas janelas ao mesmo tempo, podemos abrir varias e minimizar, maximizar, arrastar, redimensionar, fechar e com as aplicações executando dentro das mesmas, e isso tudo dentro do Flex.

Com o grande uso de Flex em softwares corporativos baseados em web, o assunto de trabalhar com janelas MDI no Flex voltou a toda, confira você mesmo o porque:

Fiz um exemplo rapidamente e bem simples para mostrar:

http://luiztarabal.com.br/examples/MDIWindow/MDIWindow.html

MDIWindow é um componente da biblioteca FlexLib.
O site do projeto MDI é http://code.google.com/p/flexmdi/

Neste artigo veremos:

  • Instalando o componente MDIWindow no flex.
  • Usando MDICanvas.
  • Criando uma janela dinamicamente em action script.

Para instalar o componente em sua aplicação siga os passos:

Baixe o arquivo .zip http://code.google.com/p/flexmdi/downloads/list ,  não se assuste com o tamanho do pacote, iremos usar apenas um arquivo de 411 KB, o restante são exemplos, docs, etc.

Logo depois de extrair o conteúdo, acesse seu projeto dentro do Flex Builder, ‘Projects’, ‘Properties’ ,  ‘Flex Build Path’, selecione agora ‘Library path’ e Add SWC, procure o arquivo ‘flexmdi.swc ‘ que esta dentro da pasta  que acabamos de descompactar ‘flexmdi-1.1flexmdi-1.1bin flexmdi.swc’ e clique em ok, pronto o componente MDIWindow está instalado, vejam na tela abaixo as bibliotecas instaladas:

Codigo mxml do projeto:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   applicationComplete="init();" layout="absolute" xmlns:ns1="flexlib.mdi.containers.*"
>

<mx:Script source="funcoes.as"/>

<!-- ns1:MDICanvas podemos chamar de container, onde as janelas sao abertas-->
<ns1:MDICanvas id="MDICanvas" width="100%" horizontalCenter="0" top="0" bottom="0">

</ns1:MDICanvas>
 <mx:Panel layout="absolute" title="Options"  height="213" width="261" right="10" top="10">

 <!-- Combox apenas para mudar a imagem de fundo  -->
 <mx:ComboBox id="seletorBackground"  change="changeEvt(event)"  x="10" y="40" width="221">

 <mx:ArrayCollection>
 <mx:Object label="Change backGround" data=""/>
 <mx:Object label="Dock" data="Dock.jpg"/>
 <mx:Object label="adobe fx" data="FFAir_Black_1900_small.jpg"/>
 <mx:Object label="Green Sea Turtle" data="Green Sea Turtle.jpg"/>
 <mx:Object label="nuvens" data="nuvens1vo2.jpg"/>
 <mx:Object label="wallpaper nuvens" data="wallpaper-nuvens-full.jpg"/>
 </mx:ArrayCollection>

 </mx:ComboBox>

 <mx:Button label="Click to open window" click="addWindow()"  width="221" x="10" y="10"/>
 <mx:TextArea x="10" y="91" width="221" height="72" id="saida"  />
 <mx:Label x="10" y="75" text="Id open"/>

 </mx:Panel>

</mx:Application>
<pre>

Usaremos um arquivo action script separados para as funções
Arquivo funcoes.as, e deve estar dentro da pasta src, junto com o mxml acima

Codigo funcoes.as:

// ActionScript file

 // importamos as classes MDIWindow
 import flexlib.mdi.containers.MDIWindow;

 // efeito MDIVistaEffects (movimento das janelas)
 import flexlib.mdi.effects.effectsLib.MDIVistaEffects;

 import flash.events.Event;
 import mx.controls.Alert;

 // adiciona uma nova janela, podemos definir varias propriedades para a mesma.
 private function addWindow():void
 {

 var win:MDIWindow = new MDIWindow();
 win.width = 350;
 win.name =  String(MDICanvas.windowManager.windowList.length + 1);
 win.title = "Window " + String(MDICanvas.windowManager.windowList.length + 1);

// aqui adicionamos a janela criada ao id MDICanvas, que esta criado no mxml
MDICanvas.windowManager.add(win);

 // apenas mostra quais estao abertas no campo de texto
 saida.text = '';
 var windows:Array = MDICanvas.windowManager.windowList;
 saida.text += windows;

 }

 // troca a imagem de fundo
 private function changeEvt(event:Event):void {

 var imgback:String = event.currentTarget.selectedItem.data;

 if(imgback)
 {
 imgback = 'images/'+imgback;
 Application.application.setStyle( "backgroundImage", imgback);
 }
 else
 {
 Application.application.setStyle( "backgroundImage", '');
 }

 }

 // na funcao init() estamos chamando ao terminar de carregar o documento
 // então é aplicado o efeito e adiciona algumas janelas.
 private function init():void

 {
 // adiciona efeito nas janelas
 MDICanvas.effectsLib = flexlib.mdi.effects.effectsLib.MDIVistaEffects;

 // adiciona janelas iniciais
 addWindow();
 addWindow();
 addWindow();
 addWindow();

 }

Como podem ver o codigo já está comentado e bem explicado.
Me desculpem se estiver faltando algo, mas como podem ver é bem simples e não requer muitas linhas para explicar!

Se houver dúvidas, comentários e afins comente ou me@luiztarabal.com.br

Façam bom aproveito!

Mar 25

Flex 4 + BlazeDS 4 + Java + DataWizards

Escrito por Stefan Horochovec em 1, 2009, 4, 6, action, Actionscript, Adobe, AMF, apache, app, AR, Artigo, auto, Beta, BI, Blazeds, blog, botão, builder 4, camp, class, código, código fonte, comunicação, conferência, configuração, control, Controls, Curso, Cursos, DataGrid, DataProvider, demo, dispatch, Download, dynamic, Eclipse, email, err, event, Evento, events, exemplo, Ferramenta, filter, flash, flash builder, Flash Builder 4, Flex, Flex 4, FlexDuck, fonte, for, Formulário, framework, free, frontend, function, Galileo, Google, handle, html, ide, IE, if, image, imagens, instalação, int, internet, Java, label, library, lista, map, menu, Messaging, mg, MXML, Number, O, on, painel, pattern, Pessoal, PHP, Plugin, pt, Remoting, RIA, Ria’s Geral, SDK, server, serviço, Serviços, servidor, spark, Spring, SpringFramework, string, Sun, tag, TAT, Tech, Tema, TextInput, Tutorial, UI, uint, Vídeo, web, window, Wordpress, XML, XP, zend @ 03 25th, 2010 | via http://www.horochovec.com.br/blog | Sem comentários
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Ouvir com webReader

Olá pessoal

A grande sensação ontem (23/03) foi a publicação pelo guru Christophe Coenraets demonstrando um vídeo aonde através do Flash Builder ele consumiu recursos de um projeto Java sem codificação no ambiente Flex. Nesse artigo vou demonstrar como trabalhar com esse recurso passo-a-passo.

Bom, primeiro passo é você ter em seu computador todas as ferramentas necessárias. Neste caso, você irá utilizar o Eclipse Galileu JEE, Flash Builder (stand-alone ou plugin) e do BlazeDS 4 Beta.

A aplicação que desenvolveremos nesse tutorial é a mesma desenvolvida no post anterior, com a diferença que aonde foi feito codificação manual no ambiente Flex, agora, iremos utilizar o Flash Builder para a geração do código fonte.

Bom, no Eclipse Galileo para iniciar um projeto, eu escolhi a opção File -> New -> Web -> Dynamic Web Project, conforme abaixo:

E depois configurei o projeto da seguinte maneira:

Bom, depois de configurar o projeto, iremos criar um Bean para serializarmos algumas informações que serão enviadas para o Flex. A idéia é bastante simples, irei criar um model para uma simples agenda de contato.

?Download Contato.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package br.com.horochovec.model;
 
import java.io.Serializable;
 
/**
 * Modelo para agenda de contato
 * @author Stefan Horochovec
 */
public class Contato implements Serializable {
 
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
 
	private String nome;
 
	private String email;
 
	public String getNome() {
		return nome;
	}
 
	public void setNome(String nome) {
		this.nome = nome;
	}
 
	public String getEmail() {
		return email;
	}
 
	public void setEmail(String email) {
		this.email = email;
	}
 
}

E em seguida, criarei um serviço que irá adicionar em um ArrayList os contatos que serão enviados do Flex para o Java.

?Download ContatoService.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package br.com.horochovec.service;
 
import java.util.ArrayList;
 
import br.com.horochovec.model.Contato;
 
/**
 * Serviço para manutenção dos contatos
 * @author Stefan Horochovec
 */
public class ContatoService {
 
	private static ArrayList listContato = new ArrayList();
 
	/**
	 * Adiciona um contato a lista
	 * @param contato
	 */
	public void addContato(Contato contato) {
		listContato.add(contato);
	}
 
	/**
	 * Retorna a lista de contatos
	 * @return
	 */
	public ArrayList getListContato() {
		return listContato;
	}
 
}

Após isso, já temos uma simples aplicação pronta para trabalhar com o Flex, basta apenas configurar os arquivos .XML para que o BlazeDS possa funcionar.

A partir de agora é necessário que você já tenha descompactado o arquivo blazeds-bin-4.0.0.14910.zip. Após descompactá-lo, você terá que descompactar o arquivo blazeds.war que surgiu da descompactação anterior. Como resultado, obterá o seguinte:

Bom, podemos copiar para o diretório WebContent/WEB-INF de nosso projeto Java, os diretórios: flex/, lib/, spring/ e os arquivos: flex-servlet.xml e web.xml. Após copiar esse conteúdo, o primeiro arquivo que iremos configurar, é o arquivo web.xml que fica dentro da pasta WebContent/WEB-INF/.

Para essa configuração, iremos alterar o conteúdo do arquivo web.xml que veio dentro do arquivo blazeds.war que foi previamente descompactado.

Perceba que os parametros da aplicação foram alterados e também foi alterado o valor da propriedade useAppserverSecurity para false. O resultado será:

?Download web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 
    <display-name>FlexDuck</display-name>
    <description>FlexDuck</description>
 
    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>
 
    <!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <display-name>MessageBrokerServlet</display-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
       </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet>
        <servlet-name>RDSDispatchServlet</servlet-name>
		<display-name>RDSDispatchServlet</display-name>
        <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
		<init-param>
			<param-name>useAppserverSecurity</param-name>
			<param-value>false</param-value>
		</init-param>
        <load-on-startup>10</load-on-startup>
    </servlet>
 
    <servlet-mapping id="RDS_DISPATCH_MAPPING">
        <servlet-name>RDSDispatchServlet</servlet-name>
        <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
 
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
 
    <!-- for WebSphere deployment, please uncomment -->
    <!--
    <resource-ref>
        <description>Flex Messaging WorkManager</description>
        <res-ref-name>wm/MessagingWorkManager</res-ref-name>
        <res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    -->
 
<!--
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring/*-config.xml
		</param-value>
	</context-param>
 
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
 
    <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
 
	<servlet>
		<servlet-name>flex</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
 
	<servlet-mapping>
    	<servlet-name>flex</servlet-name>
    	<url-pattern>/messagebroker/*</url-pattern>
 	</servlet-mapping>
 
-->
 
</web-app>

Feito isso, iremos adicionar dentro da pasta WebContent a pasta flex que foi previamente descompactada do arquivo blazeds.war, e também todo o conteúdo da pasta lib para dentro do diretório WebContent/WEB-INF/lib , obtendo o seguinte resultado:

Feito isso, iremos configurar o único arquivo .xml do BlazeDS para que esse exemplo funcione. O arquivo WEB-INF/flex/remoting-config.xml. Iremos adicionar uma configuração para informar ao BlazeDS sobre o serviço ContatoService que foi criado anteriormente, conforme abaixo:

?Download remoting-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" 
    class="flex.messaging.services.RemotingService">
 
    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>
 
    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
 
    <destination id="ContatoService">
    	<properties>
    		<source>br.com.horochovec.service.ContatoService</source>
    	</properties>
    </destination>
 
</service>

Após essa última configuração, podemos exportar o nosso projeto para um servidor web. Nesse caso, utilizaremos o Tomcat 6.x. Neste artigo não entrarei em detalhes de sua instalação e configuração.

Bom, as configurações no projeto Java já foram finalizadas, e considerando que o deploy da aplicação dentro do Tomcat já foi realizado, a partir deste momento iremos trabalhar diretamente com o Flash Builder.

Neste artigo irei demonstrar a comunicação utilizando o Flash Builder e a versão do Flex 4. Você pode fazer o download da versão 4.0 do Flash Builder e do Flex 4 SDK aqui.

Após instalado e iniciado o Flash Builder, iremos criar um projeto no seguinte molde:

As configurações feitas na segunda tela de configuração são bastante importantes. Fazendo elas da forma correta, você estará apto a iniciar o projeto sem fazer novas configurações.

Na primeira linha, em Root Folder, foi apontado o diretório de deploy da minha aplicação dentro do meu servidor de aplicação.

Na segunda linha, em Root URL, foi apontado o caminho da URL para abertura da aplicação em meu navegador de internet.

Na terceira linha, em ContextRoot, apontamos o nome da nossa aplicação.

Na quarta e ultima linha, em Output folder, apontamos o diretório de onde deve ser exportados os arquivos quando compilados. Para esse tutorial, foi apontado diretamente o diretório de minha aplicação dentro do meu servidor Tomcat.

Como resultado, o Flash Builder irá criar e disponibilizar no workspace um projeto da seguinte forma:

É muito importante fazer a conferência de uma configuração gerada automaticamente pelo Flash Builder em cima dos parametros informados na segunda etapa da criação do projeto. No menu ‘Project’ vá na opção ‘Properties’ e confira as propriedades de acordo com a imagem abaixo:

Iremos criar uma tela no Flash Builder que contenha dois campos text input para preencher as informações do nome e email do contato, e também um grid para conter a lista dos contatos que serão adicionados no Java e retornarão ao Flex através do BlazeDS.

Segue sua implementação

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<?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" height="419">
 
 
	<fx:Declarations>
 
	</fx:Declarations>
 
 
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
 
	</s:Panel>
 
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid">
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="button"/>
	</s:Panel>
</s:Application>

A partir deste momento, usaremos os recursos de Data/Services presentes no Flash Builder 4 para a geração da comunicação com o Java.

Primeiro, iremos conectar o Flash Builder com o BlazeDS. Para isso, na aba “Data/Services” clique na opção “Connect to Data/Service”. Caso ela não esteja disponivel em seu workspace, vá ao menu “Window” e marque a opção “Data/Services”.

Feito isso, na próxima tela, marque a opção “BlazeDS”, clique em Next e marque a opção para não utilizar controle de acesso. Conforme as telas abaixo:

Na última tela, você deve marcar os serviços que deseja adicionar a aplicação, com opção de definição de endereços de pacotes e depois finalizar a criação do Objeto, conforme:

Após finalizar a configuração do serviço remoto, obtemos o seguinte resultado no Flash Builder.

Agora, iremos definir que no momento do click no botão logo abaixo do DataGrid, a aplicação deverá invocar o método getListContato().

O primeiro passo para isso, é clicar com o botão direito sobre o botão com do painel que contem o DataGrid e marcar a opção “Generate Service Call“. Feito isso configure a tela do serviço conforme apresentado abaixo:

Feito isso, selecione o DataGrid e clicando com o botão direito dentro dele, selecione a opção “Bind to Data” e configure a tela conforme informado abaixo:

Nesse momento, o painel responsável por listar as informações da nossa agenda de contato já está finalizado.

Agora, clicando novamente com o botão direito em cima do DataGrid, clique na opção “Generate Details Form” e configure a tela conforme abaixo:

O formulário gerado será adicionado no mesmo container que estiver o DataGrid, portanto, será necessário reposicioná-lo dentro do Panel já criado, conforme imagem abaixo:

Ok, agora basta configurarmos o clique do botão de salvar para que adicione novos contatos.

O primeiro passo é alterar o label do botão para “Cadastrar“.

O segundo passo é clicar com o botão direito sobre o botão de cadastro e selecionar a opção “Generate Service Call” e configure a opção da seguinte forma:

Ao terminar essa configuração, você será direcionado diretamente para a implementação do click do botão com a chamada do serviço remoto. A implementação gerada do método será a seguinte:

?Download FlexDuck.mxml
1
2
3
4
5
6
protected function button2_clickHandler(event:MouseEvent):void
{
	contato.email = emailTextInput.text;
	contato.nome = nomeTextInput.text;
	addContatoResult.token = contatoService.addContato(/*Enter value(s) for */ arg0);
}

E você deverá fazer a seguinte alteração. Adicionar o parametro a ser enviado no método addContato() e inicializar o objeto contato, da seguinte forma:

?Download FlexDuck.mxml
1
2
3
4
5
6
7
protected function button2_clickHandler(event:MouseEvent):void
{
	contato = new Contato();
	contato.email = emailTextInput.text;
	contato.nome = nomeTextInput.text;
	addContatoResult.token = contatoService.addContato(contato);
}

Com isso, nosso projeto estará enviado as informações para o Java. Agora, para finalizar, iremos adicionar um evento para disparar um método quando tivermos o resultado do serviço remoto.

No CallResponder com o id “addContatoResult” pressione o CTRL + SPACE para acionar o code complete e acione o event “result“, e em seguida, solicite para que seja adicionado o ResultHandler para o event adicionado, conforme imagens abaixo:

E na função adicionada no código devemos fazer a seguinte implementação:

?Download FlexDuck.mxml
1
2
3
4
5
protected function addContatoResult_resultHandler(event:ResultEvent):void
{
	contato = new Contato();
	getListContatoResult.token = contatoService.getListContato();
}

Rodando a aplicação, teremos como resultado no navegador o seguinte:

E como resultado final no código fonte:

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?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" height="419" xmlns:services="services.*" xmlns:valueObjects="valueObjects.*">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
 
			protected function button_clickHandler(event:MouseEvent):void
			{
				getListContatoResult.token = contatoService.getListContato();
			}
 
 
			protected function button2_clickHandler(event:MouseEvent):void
			{
				var contato : Contato = new Contato();
				contato.email = emailTextInput.text;
				contato.nome = nomeTextInput.text;
				addContatoResult.token = contatoService.addContato(contato);
			}
 
 
			protected function addContatoResult_resultHandler(event:ResultEvent):void
			{
				contato = new Contato();
				getListContatoResult.token = contatoService.getListContato();
			}
 
		]]>
	</fx:Script>
 
 
	<fx:Declarations>
		<s:CallResponder id="getListContatoResult"/>
		<services:ContatoService id="contatoService" fault="Alert.show(event.fault.faultString + 'n' + event.fault.faultDetail)" showBusyCursor="true"/>
		<valueObjects:Contato id="contato"/>
		<s:CallResponder id="addContatoResult" result="addContatoResult_resultHandler(event)"/>
	</fx:Declarations>
 
	<fx:Binding source="grid.selectedItem as Contato" destination="contato"/>
 
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
		<mx:Form defaultButton="{button2}" x="1" y="-4" bottom="0" left="0" right="0" top="0">
			<mx:FormItem label="Email">
				<s:TextInput id="emailTextInput" text="{contato.email}"/>
			</mx:FormItem>
			<mx:FormItem label="Nome">
				<s:TextInput id="nomeTextInput" text="{contato.nome}"/>
			</mx:FormItem>
			<s:Button id="button2" label="Cadastrar" click="button2_clickHandler(event)"/>
		</mx:Form>
 
	</s:Panel>
 
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid" dataProvider="{getListContatoResult.lastResult}">
			<mx:columns>
				<mx:DataGridColumn headerText="email" dataField="email"/>
				<mx:DataGridColumn headerText="nome" dataField="nome"/>
			</mx:columns>
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="button" click="button_clickHandler(event)"/>
	</s:Panel>
</s:Application>

Para fazer o download do projeto clique aqui.

Espero ter ajudado, um abraço :)

Mar 24

RiaPT Meeting no Porto – A experiência, conclusão e os slides!

Escrito por riaPT em Adobe Air, amfphp, Eventos, flash, Flash Platform, Flash Player, Flex, Ria’s Geral, Ria's Geral @ 03 24th, 2010 | via http://riapt.org | Sem comentários
riaPT
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Bem, já lá vai mais de uma semana que o Meeting do Porto decorreu.

Posso dizer que, de início, pensamos em colocar um limite de 100 pessoas no evento, mas depois pensamos que a procura não iria ser muita, uma vez que no último encontro eramos apenas… três pessoas!

No entanto, lá nos aventuramos em colocar o limite de 70 + 10 speakers e a aposta foi ganha! No final, e totalizando toda a gente, eramos 67 pessoas juntas no evento!

O que correu bem?

  • O almoço

- Eramos cerca de doze pessoas e foi interessante falar das expectativas sobre o evento, de conversar com pessoas com quem não tivemos hipótese de trocar ideias noutros eventos, etc. O lombo estava bom e mesmo a queimar as duas, lá conseguimos pagar todos e lá fomos para o local onde ia decorrer o evento.

  • O evento

- Como todos notaram, o evento começou com cerca de vinte minutos de atraso. Não havia problema se ninguém se esticasse nas apresentações (o que não foi o caso!).

- Uma coisa a referir foi o espírito de todos! Durante as cerca de cinco horas em que tivemos no edifício Maus Hábitos houve sempre um bom convívio, as piadas típicas dos apresentadores ao qual a plateia correspondia sempre com umas gargalhadas. O que dizer do Luís Martins que arranjou um milagroso projector porque o nosso era “esverdeado”.

  • O jantar

Depois de tantas horas no evento, que bem que soube comer umas belas pizzas de… 50 centímetros, no S. Marino! Eramos também cerca de doze pessoas e o convívio foi muito interessante, dando para trocar ideias e falar sobre o que se passou no evento, sobre as novas tecnologias, experiências que tenhamos tido, etc. Tudo acabou, por volta da uma da manhã no Rivolli, onde decorria o Fantasporto.

  • Conclusões

Como nunca nada corre perfeito, temos noção que houve várias falhas, mas todas elas devido à pouca experiência que os organizadores tinham em realizar eventos.

  1. O local – Embora o local fosse interessante, era notório a falta de condições para a projecção dos conteúdos através do projector. O facto de ter ficado muito escuro a partir do meio do evento, fez com que o público quase não conseguisse ver os speakers.
  2. Talvez devêssemos ter apenas uma refeição em conjunto. Assim, podíamos tentar ter mais pessoas no mesmo espaço;
  3. O controlo do tempo. Esta sim, uma falha um pouco grave, umas vez que perdemos completamente a noção do tempo;

Apresentações:

Ainda não consegui que os vídeos ficassem todos disponíveis uma vez que temos limite, tanto no Vimeo, como no Youtube, de tempo para os vídeos (só dá para 10 minutos em cada).

No entanto, já podem ver o vídeo de introdução do evento aqui

Sendo assim, ficam aqui as apresentações que já nos foram facultadas pelos speakers. Quando me enviarem mais, actualizarei aqui o post

Mauro Martins:

Web – Construir é diferente de ver

Nuno Gomes:

HTML 5, a Realidade da Utopia

Miguel Pinto:

Zend Framework e Flash

Felipe Ávila:

The Usability Page

Cumprimentos a todos, e preparem-se porque vêm aí mais!

Mar 24

Artigo Integração flex + php publicado no Fórum Web

Escrito por Luiz Tarabal em Adobe, Flex, Flex4, Ria’s Geral @ 03 24th, 2010 | via http://luiztarabal.com.br/ | Sem comentários
Luiz Tarabal
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal, gostaria de agradecer a todos que nos visitaram essa semana, semana de lançamentos (Flex 4) e com certeza trouxe a tona muita informação sobre Flex, e para minha surpresa meu primeiro artigo publicado também no meu primeiro blog sobre o tema foi reproduzido no Fórum Web, http://www.forumweb.com.br, segundo Felipe Monteiro, um dos responsáveis pelo site, os acessos diários estão na faixa dos 30 mil.

Agradeço imensamente a equipe do Fórum Web, que já estão aguardando novos artigos e obrigado a todos que deixaram comentários.

:)

Mar 24

Aprendendo Flex 4

Escrito por Fabio da Silva em 1, 2009, 4, 6, Adobe, análise, AR, Artigo, Beta, BI, blog, Blogs, builder 4, camp, class, developer, flash, flash builder, Flash Builder 4, Flex, Flex 3, Flex 4, Flex4, Google, Gumbo, html, ide, IE, if, imasters, InsideRIA, int, layout, mg, mudanças, O, on, OReilly, RIA, Ria’s Geral, SDK, site, spark, TAT, UI, vs @ 03 24th, 2010 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Agora que o Flex 4 foi liberado é hora de aprender o que mudou nesta nova versão, até então não tinha baixado nenhuma versão beta pq o tempo é pouco e sempre pode mudar alguma coisa até a versão final.

Veja abaixo alguns sites que me ajudaram ou que estão me ajudando e espero que ajudem vocês também:
Adobe – Flex Developer Center
As 10 Maiores Mudanças no Flex 4
Novo Flex 4 (Gumbo)
New Features in FlashBuilder 4
Flash Builder 4; Uma análise mais a sério!
What’s new in Flash Builder 4
What’s new in Flex 4
Differences between Flex 3 and Flex 4
Introducing skinning in Flex 4
A brief overview of the Spark architecture and component set
Spark layouts with Flex 4

Mar 24

#TAM Linhas Aéras #fail e a cara (feia) do brazil

Escrito por Ved em AR, Design, designer, O, on, RIA, Ria’s Geral, UI, Ved @ 03 24th, 2010 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Essa eu não poderia deixar passar em branco.
Bem, estou nos Estados Unidos trabalhando. Meu amigo e grande designer Moisés de Moura também estava, até ontem a tarde, quando voltou ao brazil. Eu ainda fico alguns dias.
Bem, para suprir nossas necessidades com relação a equipamento de trabalho (e também por ser uma pechincha se comparado aos [...]

Mar 24

Anuncio de vaga para Flexer e questionamento

Escrito por Ved em 1, AR, back, BI, blog, Flex, O, on, Ria’s Geral @ 03 24th, 2010 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Primeiro o questionamento: aonde estão os Flexers brasileiros?
No dia 10 de Março eu fiz um post anunciando uma vaga. Hoje, recebi por e-mail o feedback da pessoa que me solicitou anunciar e ela me disse que recebeu apenas 5 currículos. Apenas cinco! Bem, eu sei a visitação do meu blog e ela não é pequena. Sei [...]

Mar 24

Treinamento Online – Desenvolvendo com Flex e .Net

Escrito por Vinícius Sandim em .NET, 1, 6, action, Action Script, Adobe, Adobe Flex, app, Apresentação, AR, back, botão, C#.net, comparação, control, Controles, DataGrid, Desenvolvimento, developer, Flex, fluorine, FluorineFx, for, framework, game, ide, IE, int, internet, Microsoft, MXML, O, on, Outros, pagamento, pagSeguro, programação, pt, Revisão, RIA, Ria’s Geral, Rich Internet Application, Sugestões, tag, TAT, Treinamento, UI, Vagas, Visual Studio, web, XML, XP, zend @ 03 24th, 2010 | via http://www.viniciussandim.com | Sem comentários
Vinícius Sandim
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Depois de muitas promessas, finalmente estou abrindo uma nova turma do treinamento de Flex com .Net.

Assim como os outros, este será um treinamento VIP, limitado a 12 participantes, para que todas as dúvidas sejam solucionadas durante o desenrolar do treinamento.

Mais detalhes:

CONTEÚDO

  • Rich Internet Applications;
  • Soluções que implementam RIA’s atualmente;
  • Quem usa Flex™;
  • Flex™ Buider 3;
  • Anatomia de um projeto Flex™;
  • MXML e Action Script;
  • Tour de Flex;
  • Principais controles;
  • Containers;
  • Datagrid;
  • Integração com back-end;
  • Comparação entre formas de integração;
  • Integração com Microsoft® .net™;
  • FluorineFx;
  • Serialização de objetos.
  • Trazendo informações dinâmicas via Remote Object;
  • Desenvolvimento de aplicação (Agenda de Contatos);
  • Publicando minha aplicação;
  • Framework caching;
  • Finalizando;

REQUISITOS

  • Conhecimentos básicos em Programação Orientada a Objeto;
  • Visual Studio 2005 ou Visual Web Developer Express 2005 instalado;
  • Adobe Flex Buider 3 instalado;

OBJETIVO

  • Capacitar todos os participantes a criar aplicações ricas para a internet usando o Flex™ como camada de apresentação e Microsoft® .net™ como camada de persistência.

PROGRAMAÇÃO

  • Carga Horária: 16 Horas;
  • Horário Previsto: 09:00 as 13:00hs;
  • Dia da Semana: Sábado;
  • Previsão Início: Abril/2010;
  • Previsão Fim: Maio/2010;
  • Vagas: 12 participantes;
  • Local: Adobe Connect;
  • Investimento: R$ 285,00;
  • Forma de Pagamento:
    • Boleto Bancário;
    • Cartão de Crédito (Em até 12x com PagSeguro);

Para se inscrever, use o botão abaixo e escolha a melhor forma de pagamento:

Dúvidas ou sugestões, entre em contato através do e-mail treinamento@viniciussandim.com.

Mar 23

Flash Builder + Flex SDK 4 + Java + BlazeDS – Tutorial

Escrito por Stefan Horochovec em 1, 2.0, 2009, 4, 6, action, Actionscript, Adobe, Air, AMF, apache, app, Apresentação, AR, Artigo, auto, back, BI, Bindable, Blazeds, blog, botão, camp, class, classe, classes, código, collection, comunicação, conferência, configuração, control, Controls, Curso, DataGrid, DataProvider, demo, Desenvolvedor, Desenvolvimento, Desktop, Download, dynamic, Eclipse, email, err, erro, event, Evento, Eventos, events, exemplo, falha, Ferramenta, flash, flash builder, Flash Player, Flex, Flex 4, FlexDuck, fonte, for, free, function, Google, handle, html, ide, IE, if, image, Iniciando, instalação, int, internet, j2ee, Java, label, library, lista, map, menu, Mercado, Messaging, mg, MXML, Number, O, on, opensource, painel, pattern, Pessoal, PHP, player, Plugin, produto, pt, Remoting, RIA, Ria’s Geral, Scrum, SDK, serviço, servidor, site, Software, spark, string, Sun, tag, TAT, Tema, Teste, TextInput, tool, Tutorial, UI, uint, Ved, web, Wordpress, wow, XML, XP, zend @ 03 23rd, 2010 | via http://www.horochovec.com.br/blog | Sem comentários
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Ouvir com webReader

Olá pessoal!

Depois de alguns dias sem postar nada no blog, vou atender ao pedido de alguns colegas que fizeram um curso de Scrum a uns dias atrás e postar algo no blog sobre como começar um projeto com Java e Flex, como faço para “instalar” o BlazeDS e fazer minha primeira comunicação.

Para quem está iniciando no desenvolvimento Flex com Java como back-end e está optando por trabalhar com Remote Objects precisa trabalhar com algo que faça a comunicação entre Flex e Java.

Existem diversas opções hoje no mercado, e a própria Adobe disponibiliza dois produtos para isso.  O objetivo desse tutorial é exemplificar o uso do BlazeDS para essa comunicação.

O BlazeDS é uma ferramenta open-source, e hoje é amplamente utilizada para a comunicação Java – Flex. Tem como objetivo prover ao desenvolvedor Flex uma forma de se comunicar com seu back-end através de Remote Objects ou comunicação Real-Time através de Messages.

Vale lembrar que o BlazeDS pode ser utilizado para comunicações de aplicações desenvolvidas em Flex para Web (Flash Player) ou para Desktop (AIR).

Mas como iniciar? Primeiramente, devemos fazer o download (clique aqui para o download) através do site oficial do BlazeDS.

O download que estamos fazendo é a versão binária, contendo um arquivo .WAR que contém os arquivos .xml e os .jars necessários para a sua utilização. Também é possível fazer o download do código-fonte do BlazeDS clicando aqui.

Após o download e sua descompactação, também é necessário descompactar o arquivo blazeds.war. Para isso, você poderá utilizar um descompactador como o WinRAR por exemplo. Fazendo isso, obteremos a seguinte estrutura:

O conteúdo da pasta META-INF será desconsiderado. Levaremos em consideração apenas o conteúdo da pasta WEB-INF conforme seguinte apresentação:

A pasta classes e src serão desconsideradas nesse tutorial também.

Dentro da pasta flex, temos os arquivos XMLs necessários para configuração em nosso projeto que será criado no Java, e na pasta lib, temos as bibliotecas java (*.jar) que deverão ser incorporados em nosso projeto. E o arquivo web.xml contém as informações necessárias para a configuração do servlet em nosso projeto.

Nesse artigo, o software utilizado para criação e desenvolvimento do projeto Java é Eclipse Galileu junto com o  WebTools. Você pode tranquilamente adaptar esse tutorial para qualquer IDE que você utilize em seu dia-a-dia.

Para iniciar um projeto, eu escolhi a opção File -> New -> Web -> Dynamic Web Project, conforme abaixo:

E depois configurei o projeto da seguinte maneira:

Bom, depois de configurar o projeto, iremos criar um Bean para serializarmos algumas informações que serão enviadas para o Flex. A idéia é bastante simples, irei criar um model para uma simples agenda de contato.

?Download Contato.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package br.com.horochovec.model;
 
import java.io.Serializable;
 
/**
 * Modelo para agenda de contato
 * @author Stefan Horochovec
 */
public class Contato implements Serializable {
 
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
 
	private String nome;
 
	private String email;
 
	public String getNome() {
		return nome;
	}
 
	public void setNome(String nome) {
		this.nome = nome;
	}
 
	public String getEmail() {
		return email;
	}
 
	public void setEmail(String email) {
		this.email = email;
	}
 
}

E em seguida, criarei um serviço que irá adicionar em um ArrayList os contatos que serão enviados do Flex para o Java.

?Download ContatoService.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package br.com.horochovec.service;
 
import java.util.ArrayList;
 
import br.com.horochovec.model.Contato;
 
/**
 * Serviço para manutenção dos contatos
 * @author Stefan Horochovec
 */
public class ContatoService {
 
	private static ArrayList listContato = new ArrayList();
 
	/**
	 * Adiciona um contato a lista
	 * @param contato
	 */
	public void addContato(Contato contato) {
		listContato.add(contato);
	}
 
	/**
	 * Retorna a lista de contatos
	 * @return
	 */
	public ArrayList getListContato() {
		return listContato;
	}
 
}

Após isso, já temos uma simples aplicação pronta para trabalhar com o Flex, basta apenas configurar os arquivos .XML para que o BlazeDS possa funcionar.

O primeiro arquivo que iremos configurar, é o arquivo web.xml que fica dentro da pasta WebContent/WEB-INF/. Para essa configuração, iremos adicionar o conteúdo do arquivo web.xml que veio dentro do arquivo blazeds.war que foi previamente descompactado. O resultado será:

?Download web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>FlexDuck</display-name>
	<welcome-file-list>
		<welcome-file>FlexDuck.html</welcome-file>
	</welcome-file-list>
 
 
    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>
 
    <!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
       </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
 
</web-app>

Feito isso, iremos adicionar dentro da pasta WebContent a pasta flex que foi previamente descompactada do arquivo blazeds.war, e também todo o conteúdo da pasta lib para dentro do diretório WebContent/WEB-INF/lib , obtendo o seguinte resultado:

Feito isso, iremos configurar o único arquivo .xml do BlazeDS para que esse exemplo funcione. O arquivo WEB-INF/flex/remoting-config.xml. Iremos adicionar uma configuração para informar ao BlazeDS sobre o serviço ContatoService que foi criado anteriormente, conforme abaixo:

?Download remoting-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" 
    class="flex.messaging.services.RemotingService">
 
    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>
 
    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
 
    <destination id="ContatoService">
    	<properties>
    		<source>br.com.horochovec.service.ContatoService</source>
    	</properties>
    </destination>
 
</service>

Após essa última configuração, podemos exportar o nosso projeto para um servidor web. Nesse caso, utilizaremos o Tomcat 6.x. Neste artigo não entrarei em detalhes de sua instalação e configuração.

Bom, as configurações no projeto Java já foram finalizadas, e considerando que o deploy da aplicação dentro do Tomcat já foi realizado, a partir deste momento iremos trabalhar diretamente com o Flex.

Neste artigo irei demonstrar a comunicação utilizando o Flash Builder e a versão do Flex 4. Você pode fazer o download da versão 4.0 do Flash Builder e do Flex 4 SDK aqui.

Após instalado e iniciado o Flash Builder, iremos criar um projeto no seguinte molde:

As configurações feitas na segunda tela de configuração são bastante importantes. Fazendo elas da forma correta, você estará apto a iniciar o projeto sem fazer novas configurações.

Na primeira linha, em Root Folder, foi apontado o diretório de deploy da minha aplicação dentro do meu servidor de aplicação.

Na segunda linha, em Root URL, foi apontado o caminho da URL para abertura da aplicação em meu navegador de internet.

Na terceira linha, em ContextRoot, apontamos o nome da nossa aplicação.

Na quarta e ultima linha, em Output folder, apontamos o diretório de onde deve ser exportados os arquivos quando compilados. Para esse tutorial, foi apontado diretamente o diretório de minha aplicação dentro do meu servidor Tomcat.

Como resultado, o Flash Builder irá criar e disponibilizar no workspace um projeto da seguinte forma:

É muito importante fazer a conferência de uma configuração gerada automaticamente pelo Flash Builder em cima dos parametros informados na segunda etapa da criação do projeto. No menu ‘Project’ vá na opção ‘Properties’ e confira as propriedades de acordo com a imagem abaixo:

Após conferir essas informações, podemos iniciar o desenvolvimento do projeto no Flex.

Primeiramente, iremos criar o bean que será enviado para o Java e vice-versa. Esse bean será um espelho do bean criado no Java, conforme abaixo:

?Download Contato.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package br.com.horochovec.model
{
	[RemoteClass(alias="br.com.horochovec.model.Contato")]
	[Bindable]
	public class Contato
	{
 
		public var nome 	: String;
 
		public var email 	: String;
 
		public function Contato()
		{
		}
 
	}
}

Em seguida, irei criar uma tela no Flash Builder que contenha dois campos text input para preencher as informações do nome e email do contato, e também um grid para conter a lista dos contatos que serão adicionados no Java e retornarão ao Flex através do BlazeDS.

Segue sua implementação

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
		<s:Button x="55" label="Cadastrar" bottom="10" id="btnCadastro"/>
		<s:Label x="10" y="16" text="Nome:"/>
		<s:Label x="13" y="50" text="Email:"/>
		<s:TextInput x="56" y="10" width="332" id="nome"/>
		<s:TextInput x="56" y="44" width="332" id="email"/>
	</s:Panel>
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid" dataProvider="{this.listContato}">
			<mx:columns>
				<mx:DataGridColumn headerText="Nome" dataField="nome"/>
				<mx:DataGridColumn headerText="Email" dataField="email"/>
			</mx:columns>
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5"/>
	</s:Panel>
</s:Application>

Após a construção da tela, iremos criar o serviço remoto que será responsável pela comunicação com o Java. Conforme trecho abaixo, criaremos um RemoteObject e dois métodos para serem executados pela aplicação. Definiremos também os métodos que devem ser disparados quando ocorrerem os retornos, tanto de sucesso quanto de falha na comunicação.

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
<fx:Declarations>
	<s:RemoteObject id="remoteObject"
					destination="ContatoService"
					fault="onFault(event);">
		<s:method name="addContato"
				  result="onResultAddContatoHandler(event);"
				  fault="onFault(event);" />
		<s:method name="getListContato"
				  result="onResultGetListContatoHandler(event);"
				  fault="onFault(event);" />
	</s:RemoteObject>
</fx:Declarations>

Feito isso, faremos a implementação dos métodos a cima informados para resultados do RemoteObject.

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<fx:Script>
<![CDATA[
import br.com.horochovec.model.Contato;
 
import mx.collections.ArrayList;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
 
[Bindable]
public var contato : Contato 		= new Contato();
 
[Bindable]
public var listContato : ArrayList 	= new ArrayList();
 
 
/**
 * Metodo para falhas na comunicação
 */
protected function onFault(event:FaultEvent) : void
{
	Alert.show('Erro');
}
 
/**
 * Funcao para retorno de cadastro do Contato
 */
protected function onResultAddContatoHandler(event:ResultEvent) : void
{
	Alert.show('Adicionado');
}
 
/**
 * Funcao para retorno da lista de contatos
 */
protected function onResultGetListContatoHandler(event:ResultEvent) : void
{
	this.listContato = event.result as ArrayList;
}
 
]]>
</fx:Script>

Agora, iremos implementar no botão do painel de cadastro e ao botão no painel de listagem de informações, o evento de click para que seja enviado ao java o bean para cadastro e solicitado ao java a lista de contatos.

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
	<s:Button x="55" label="Cadastrar" bottom="10" id="btnCadastro" click="btnCadastroClickHandler(event)"/>
	<s:Label x="10" y="16" text="Nome:"/>
	<s:Label x="13" y="50" text="Email:"/>
	<s:TextInput x="56" y="10" width="332" id="nome"/>
	<s:TextInput x="56" y="44" width="332" id="email"/>
</s:Panel>
<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
	<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid" dataProvider="{this.listContato}">
		<mx:columns>
			<mx:DataGridColumn headerText="Nome" dataField="nome"/>
			<mx:DataGridColumn headerText="Email" dataField="email"/>
		</mx:columns>
	</mx:DataGrid>
	<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="btnListar" click="btnListarClickHandler(event)"/>
</s:Panel>

Com os eventos de click de cada botão implementados, falta apenas fazer a implementação de seus métodos. Para isso vamos adicionar ao bloco fx:script o seguinte código:

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * Evento de click do botão de cadastro
 */
protected function btnCadastroClickHandler(event:MouseEvent):void
{
	this.remoteObject.addContato(this.contato);
}
 
/**
 * Evento de click do botão de pesquisa
 */
protected function btnListarClickHandler(event:MouseEvent):void
{
	this.remoteObject.getListContato();
}

Para finalizar o código, irei adicionar o Binding entre os dois TextInput e o bean que será serializado para o Java:

?Download FlexDuck.mxml
1
2
<fx:Binding source="nome.text" destination="contato.nome" twoWay="true"/>
<fx:Binding source="email.text" destination="contato.email" twoWay="true"/>

Feito isso, pronto, nossa aplicação de teste está pronta para o uso final, como resultado, obtemos:

A implementação completa do Flex será:

?Download FlexDuck.mxml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?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">
 
	<fx:Script>
	<![CDATA[
		import br.com.horochovec.model.Contato;
 
		import mx.collections.ArrayCollection;
		import mx.controls.Alert;
		import mx.rpc.events.FaultEvent;
		import mx.rpc.events.ResultEvent;
 
		[Bindable]
		public var contato : Contato 				= new Contato();
 
		[Bindable]
		public var listContato : ArrayCollection 	= new ArrayCollection();
 
 
		/**
		 * Metodo para falhas na comunicação
		 */
		protected function onFault(event:FaultEvent) : void
		{
			Alert.show('Erro');
		}
 
		/**
		 * Funcao para retorno de cadastro do Contato
		 */
		protected function onResultAddContatoHandler(event:ResultEvent) : void
		{
			Alert.show('Adicionado');
		}
 
		/**
		 * Funcao para retorno da lista de contatos
		 */
		protected function onResultGetListContatoHandler(event:ResultEvent) : void
		{
			this.listContato = event.result as ArrayCollection;
		}
 
		/**
		 * Evento de click do botão de cadastro
		 */
		protected function btnCadastroClickHandler(event:MouseEvent):void
		{
			this.remoteObject.addContato(this.contato);
		}
 
		/**
		 * Evento de click do botão de pesquisa
		 */
		protected function btnListarClickHandler(event:MouseEvent):void
		{
			this.remoteObject.getListContato();
		}
 
	]]>
	</fx:Script>
 
	<fx:Binding source="nome.text" 	destination="contato.nome" 	twoWay="true"/>
	<fx:Binding source="email.text" destination="contato.email" twoWay="true"/>
 
	<fx:Declarations>
 
		<s:RemoteObject id="remoteObject"
						destination="ContatoService"
						fault="onFault(event);">
 
			<s:method name="addContato"
					  result="onResultAddContatoHandler(event);"
					  fault="onFault(event);" />
			<s:method name="getListContato"
					  result="onResultGetListContatoHandler(event);"
					  fault="onFault(event);" />
 
		</s:RemoteObject>
 
	</fx:Declarations>
 
 
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
		<s:Button x="55" label="Cadastrar" bottom="10" id="btnCadastro" click="btnCadastroClickHandler(event)"/>
		<s:Label x="10" y="16" text="Nome:"/>
		<s:Label x="13" y="50" text="Email:"/>
		<s:TextInput x="56" y="10" width="332" id="nome"/>
		<s:TextInput x="56" y="44" width="332" id="email"/>
	</s:Panel>
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid" dataProvider="{this.listContato}">
			<mx:columns>
				<mx:DataGridColumn headerText="Nome" dataField="nome"/>
				<mx:DataGridColumn headerText="Email" dataField="email"/>
			</mx:columns>
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="btnListar" click="btnListarClickHandler(event)"/>
	</s:Panel>
 
</s:Application>

Você pode fazer o download do projeto aqui.

Obrigado e um abraço a todos!

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2790 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com