Transferindo Dados entre Flex e Java Utilizando VO (Value Object)

VO é um Pattern para transferência de dados. A utilização desse Pattern no Flex acessando a camada de negócio (Java, no caso desse exemplo) através do protocolo AMF (Remoting) é muito simples e prática. Um objeto VO pode possuir vários tipos de objetos encapsulados. Ao trafegar os dados, apenas o objeto VO é enviado e recebido como parâmetro, facilitando assim a manutenção, organização e entendimento do código, uma vez que o Java já faz a serialização do VO enviado pelo Flex. Imagine a necessidade de enviar mais de 20 dados de um novo funcionário, através de um formulário de cadastro. Como seriam passados esses parâmetros sem a utilização de VO? E se futuramente tivesse que adicionar ou remover alguns dados? Agora será apresentado um exemplo prático: Tanto no backend (Java) quanto no frontend (Flex) é criado uma classe VO. As duas classes possuem as mesmas propriedades. No VO do Flex é feito um registro da classe Java.

VO de funcionário em Java

package com.dclick.exemplo.vo;import java.io.Serializable;

public class FuncionarioVO implements Serializable {

static final long serialVersionUID=0;

private String nome;
private String email;
private String endereco;
private Number telefone;

// Gets e Sets
}

VO de funcionário em Flex

class com.dclick.exemplo.vo.FuncionarioVO {
public var nome: String;
public var email: String;
public var endereco: String;
public var telefone: String

public static var registered:Boolean = Object.registerClass(“com.dclick.exemplo.vo.FuncionarioVO”, com.dclick.exemplo.vo.FuncionarioVO );

}

Comparando as duas classes percebe-se que não é necessário definir os Gets e Sets da classe Flex. Na classe Flex é observado a definição da variável registered que faz a associação entre as duas camadas.

Populando o VO de funcionário no Flex.

// importa a classe VOimport com.dclick.exemplo.vo.FuncionarioVO;

// Método que popula e envia o formulário
public function enviaFuncionario():FuncionarioVO{

// Criação do objeto VO – instância da classe FuncionarioVO.
var funcionarioVO:FuncionarioVO = new FuncionarioVO();
funcionarioVO.nome = model.nome;
funcionarioVO.email = model.email;
funcionarioVO.endereco = model.telefone;
funcionarioVO.telefone = model.ramal;

// Chamada do método enviaFuncionario da conexão Remoting criada // Envio apenas do VO contendo todos os dados encapsulados.
var call = service.enviaFuncionario(funcionarioVO);

}

Manipulando o VO de funcionário no Java

package com.dclick.exemplo.funcionario;import java.io.Serializable;
com.dclick.exemplo.vo.FuncionarioVO;

public static boolean enviaFuncionario (Serializable obj){

funcionarioVO vo = (FuncionarioVO) obj;

// Agora podemos obter todos os dados do nosso VO.
String nome = vo.getNome();
String email = vo.getEmail();
String endereco = vo.getEndereco();
String telefone = vo.getTelefone()

// Continua o código da classe.
return true;

}

Agora, suponha que esse funcionário estará alocado em mais de um projeto. Nesse caso é necessário criar um VO de projetos e popular dentro do VO de funcionário.

VO de projetos em Java

package com.dclick.exemplo.vo;import java.io.Serializable;

public class ProjetoVO implements Serializable {

static final long serialVersionUID=0;

private String codigo_projeto;
private String nome_projeto;

// Gets e Sets
}

VO de projetos em Flex

class com.dclick.exemplo.vo.ProjetoVO {public var codigo_projeto: String;
public var nome_projeto: String;

public static var registered:Boolean = Object.registerClass(“com.dclick.exemplo.vo.ProjetoVO”, com.dclick.exemplo.vo.ProjetoVO );
}

Alteração da Classe VO de funcionários em Java

package com.dclick.exemplo.vo;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class FuncionarioVO implements Serializable {

static final long serialVersionUID=0;

private String nome;
private String email;
private String endereco;
private Number telefone;

private List projetoVO = new ArrayList();

// Gets e Sets
}

Alteração da Classe VO de funcionários em Flex

class com.dclick.exemplo.vo.FuncionarioVO {public var nome: String;
public var email: String;
public var endereco: String;
public var telefone: String

public var projeto_vo:Array = new Array();

public static var registered:Boolean = Object.registerClass(“com.dclick.exemplo.vo.FuncionarioVO”, com.dclick.exemplo.vo.FuncionarioVO );

}

Populando o VO de funcionário no Flex.

// importa a classe VO
import com.dclick.exemplo.vo.FuncionarioVO;
import com.dclick.exemplo.vo.ProjetoVO; // Método que popula e envia o formulário
public function enviaFuncionario():FuncionarioVO{

// Criação do objeto VO – instância da classe FuncionarioVO.
var funcionarioVO:FuncionarioVO = new FuncionarioVO();
funcionarioVO.nome = model.nome;
funcionarioVO.email = model.email;
funcionarioVO.endereco = model.telefone;
funcionarioVO.telefone = model.ramal;
funcionarioVO.projeto_vo = new Array():

for (var i:Number = 0; i
var projetoVO:ProjetoVO = new ProjetoVO;
projetoVO.codigo_projeto = model.projetos_selecionados[i];
funcionarioVO.projeto_vo.addItem(projetoVO);
}

// Chamada do método enviaFuncionario da conexão Remoting criada // Envio apenas do VO contendo todos os dados encapsulados.
var call = service.enviaFuncionario(funcionarioVO);

}

Manipulando o VO de funcionário no Java

package com.dclick.exemplo.funcionario;import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

com.dclick.exemplo.vo.FuncionarioVO;

public static boolean enviaFuncionario (Serializable obj){

funcionarioVO vo = (FuncionarioVO) obj;

// Agora podemos obter todos os dados do nosso VO.
String nome = vo.getNome();
String email = vo.getEmail();
String endereco = vo.getEndereco();
String telefone = vo.getTelefone()

List projetos = vo.getprojetosVO();
Iterator i = projetos.iterator();

while (i.hasNext()){
ProjetoVO projVO = (ProjetoVO) i.next();
System.out.println(“Código do Projeto “ + projVO.codigo_projeto)
}

// Continua o código da classe.
return true;
}


6 comentários

  1. mauro em 11.jan.07 às 12:43 am

    nem

  2. Eder em 20.mar.07 às 9:59 am

    Interessantissimo essa maneira de enviar os dados !!

    Se puder exlique melhor fiquei um pouco perdido na criaçao das classes no java!
    Um abraço fique com Deus

  3. Rodrigo Pereira Fraga em 4.abr.07 às 11:36 am

    Tomei a liberdade de aprimorar seu tutorial,
    acesse:
    http://e-digows.blogspot.com/2007/03/flex-java-e-mysql-troca-de-objetos.html

  4. Jean em 24.set.07 às 4:22 pm

    Olá,

    Eu achei muito interessante o material, porém quando tento fazer ele funcionar na minha máquina dá pau,
    Gostaria de ver se vc tem o código fonte desse exemplo pra me ajudar….

    Obrigado,

    Jean

  5. carlos em 7.dez.07 às 12:04 pm

    fala com ele

Trackbacks

  1. DClick Blog

Deixe Seu Comentário