Boa noite pessoal,
Existe alguma maneira de fazer com que um flash(SWF) obtenha parametros de uma resposta de um Servlet? Ou seja, um swf que é alimentado por uma response de um Servlet.
Se sim, como fazer?
[]'s
Boa noite pessoal,
Existe alguma maneira de fazer com que um flash(SWF) obtenha parametros de uma resposta de um Servlet? Ou seja, um swf que é alimentado por uma response de um Servlet.
Se sim, como fazer?
[]'s
Olha tem um framework que eu ouvir alguns colegas meus falando para essa função, mas eu nunca usei.
Que é o framework openamf feito para trabalhar java + flash, Java Flash Remoting.
AMF é um protocolo para intercâmbio de objetos ActionScript com outra tecnologia. É um mecanismo de serialização/deserialização de objetos ActionScript.
É Flash “puro” ou Flex que você está usando?
Se for só a biblioteca ActionScript do Flash, vc pode usar a classe URLLoader. Se for a API do Flex SDK, existem algumas alternativas: WebService (consome web services), HttpService (consome dados em html) e RemoteObject (consome dados em AMF). Se quiser referenciar a API do Flex a partir do Flash, dê uma olhada aqui.
[]'s
É flash puro mesmo, não manjo nada de flex.
Exemplo:
dados.jsp<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<raiz>
<pessoas>
<c:forEach varStatus="i" begin="1" step="1" end="${param.quantidade}">
<pessoa>
<nome>Nome ${i.count}</nome>
<sobrenome>Sobrenome ${i.count}</sobrenome>
</pessoa>
</c:forEach>
</pessoas>
</raiz>
<raiz>
<pessoas>
<pessoa>
<nome>Nome 1</nome>
<sobrenome>Sobrenome 1</sobrenome>
</pessoa>
<pessoa>
<nome>Nome 2</nome>
<sobrenome>Sobrenome 2</sobrenome>
</pessoa>
<pessoa>
<nome>Nome 3</nome>
<sobrenome>Sobrenome 3</sobrenome>
</pessoa>
</pessoas>
</raiz>
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.net.URLVariables;
var loader: URLLoader;
// função para executar a carga dos dados de uma URL
function load() {
// variáveis a serem enviadas
var vars: URLVariables = new URLVariables();
// olha a quantidade aqui! nesse caso, quero que sejam geradas 10 pessoas
vars.quantidade = 10;
// requisição para a URL que aponta para o dados.jsp
var request: URLRequest = new URLRequest( "http://localhost:<porta do tomcat>/<seu contexto>/<caminho do jsp>/dados.jsp");
request.method = "POST";
request.data = vars;
// carregador
loader = new URLLoader();
// registra os eventos do carregador
loader.addEventListener( IOErrorEvent.IO_ERROR, errorHandler );
loader.addEventListener( Event.COMPLETE, completeHandler );
try {
// tenta carregar o request
loader.load( request );
} catch ( erro: SecurityError ) {
trace( "erro..." );
}
}
// função para tratar um erro de IO
function errorHandler( e: IOErrorEvent ) {
campo.text = "Não foi possível carregar os dados...";
}
// função para tratar o evento complete do carregador
// ou seja, quando o carregador é executado (load)
// e os dados são obtidos
function completeHandler( e: Event ) {
// cria um XML com os dados obtidos
var xml: XML = new XML( loader.data );
var dados: String = "";
// itera pelo XML criado, montando uma string
for each ( var el: XML in xml.pessoas ) {
for each ( var p: XML in el.pessoa ) {
dados += "Nome: " + p.nome + "\n";
dados += "Sobrenome: " + p.sobrenome + "\n\n";
}
}
// configura a propriedade text de um campo
// de texto dinâmico com o valor da string dados
campo.text = dados;
// faz o trace dos dados (manda para a saída
// do flash player)
trace( dados );
}
// executa a função load
load();
// para o filme
stop();
Ao executar o swf, o campo de texto vai ser carregado com os valores obtidos no XML.
Você pode gerar os dados em qualquer formato, basta você fazer o parse depois.
Estou enviando um projeto Java Web do NetBeans. Dentro da estrutura do projeto está o obtemDados.fla, que é o arquivo fonte em Flash (CS 5) do que eu te expliquei.
[]'s
Valew David, muito obrigado pela atenção.
Vou tentar adaptar para as minhas necessidades e ver se aprendo algo. 
Legal!
Tente modularizar ainda mais o código, fazendo com que a função load possa ser chamada em um botão por exemplo, recebendo a URL e as variáveis a serem enviadas como parâmetro. Assim você tem um método genérico para esse tipo de tratamento. A função load tbm pode receber como parâmetro a função que faz o tratamento do evento COMPLETE, pois em ActionScript vc pode passar funções como parâmetro. Ficaria algo assim.
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
var carregar: Function = function( request: URLRequest, completeHandler: Function, errorHandler: Function ) {
var loader: URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, completeHandler );
loader.addEventListener( IOErrorEvent.IO_ERROR, errorHandler );
try {
loader.load( request );
} catch ( erro: SecurityError ) {
trace( "erro..." );
}
}
var tratadorErro: Function = function( e: IOErrorEvent ) {
campo.text = "Não foi possível carregar os dados...";
}
var completeHandler: Function = function( e: Event ) {
var xml: XML = new XML( ( e.target as URLLoader ).data );
var dados: String = "";
for each ( var el: XML in xml.pessoas ) {
for each ( var p: XML in el.pessoa ) {
dados += "Nome: " + p.nome + " ";
dados += "Sobrenome: " + p.sobrenome + "\n";
}
}
campo.text = dados;
trace( dados );
}
btnQuant.addEventListener( MouseEvent.CLICK, function( e: MouseEvent ) {
var vars: URLVariables = new URLVariables();
vars.quantidade = Number( campoQuant.text );
var request: URLRequest = new URLRequest( "http://localhost:8084/DadosRemotosFlash/dados.jsp");
request.method = "POST";
request.data = vars;
carregar( request, completeHandler, tratadorErro );
});
Novamente, segue em anexo o projeto do NetBeans e o arquivo .fla novo (obtemDadosMod.fla).
[]'s
Tenho uma aplicação Flex a qual não possuo o código fonte, porém sei quais os parâmetros que a aplicação espera. Atualmente estou chamando a aplicação em um jsp passando os parâmetros via flashVars, porém não é uma forma muito segura.
Alguém saberia me indicar alguma forma segura de eu passar os parâmetros para a aplicação sem expor o conteúdo passado?