Outra dúvida muito solicitada por email pela galera é a respeito da atualização do swiz, quando atualiza o framework logo de kara dá erro,confesso que esse tempo todo não trabalhei com projetos usando o swiz, só quando fiz esse Tutorial, e também por falta de tempo, não atualizei o framework, mas esse final de semana para minha surpresa tentei migrar e foi super tranquilo, então vou passar a dica para vocês agora.
Esse artigo é continuação do
TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
TUTORIAL JAVA + FLEX NA PRÁTICA 2/6
TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus
TUTORIAL JAVA + FLEX NA PRÁTICA 8 – Datas
Caso queira o projeto java é só baixar aqui (sem as libs).
Caso queira o projeto java é só baixar aqui.(com as libs).
Caso queira o projeto flex é só baixar aqui.
ATUALIZANDO O SWIZ FRAMEWORK
Primeira coisa que vamos fazer é baixar a última versão stable e atualmente (25/01/2009) é a swiz-0.6.4-flex3.swz. Digo isso porque vi no site da swiz que existe a versão alpha 1.0 do framework, esse sim pelo que vi terá algumas novidades notável, como metadata personalizado, estou migrando para essa versão 0.6.4 e quando lançar a 1.0 atualizo vocês por aqui no blog
. vamos ao que interessa .
- se ainda não baixou baixe o swiz-0.6.4-flex3.swz.
- na pasta libs do nosso projeto flex (CrudFlex) retiramos a antiga lib (swiz-0.0.5-010609.swc) e adicionamos a nova 0.6.4.
depois de ter feito isso vai dar erro na nossa models.delegates, isso porque a classe AbstractDelegate foi retirada do framework do swiz, basta retirar o extends AbstractDelegate que nossa classe voltará a funcionar, se vc tentar rodar agora já vai funcionar, blz.. espero que tenha ajudado muita gente.
Tô brincando galera... já que é para atualizar vamos atualizar direito..hehe assim funciona mais não está de acordo com a documentação do Swiz.
Próximo passo nosso será criar o nosso SwizConfig, no nosso projeto na index.mxml temos um preinitialize que invocava a funcção que iniciava o Swiz, agora temos o Swiz config que substitui essa antiga configuração, então nosso index.mxml era assim:
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
-
preinitialize="{iniciar(event)}">
-
-
<mx:Script>
-
<![CDATA[
-
import com.saberprogramar.views.CidadeView;
-
import com.saberprogramar.views.EstadoView;
-
import mx.managers.PopUpManager;
-
import org.swizframework.Swiz;
-
import mx.events.FlexEvent;
-
-
private function iniciar(event:FlexEvent):void{
-
Swiz.setStrict(false).loadBeans( [Beans] );
-
}
-
-
private function chamarCidadeView():void{
-
PopUpManager.createPopUp(this,CidadeView,false);
-
}
-
-
private function chamarEstadoView():void{
-
PopUpManager.createPopUp(this,EstadoView,false);
-
}
-
-
]]>
-
</mx:Script>
-
<mx:Button x="10" y="22" label="Estado" height="52" width="88" click="{chamarEstadoView()}"/>
-
<mx:Button x="10" y="93" label="Cidade" width="88" height="54" click="{chamarCidadeView()}"/>
-
-
-
</mx:Application>
ficou agora assim:
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
-
xmlns:swiz="http://swiz.swizframework.org">
-
-
<mx:Script>
-
<![CDATA[
-
import mx.logging.LogEventLevel;
-
import com.saberprogramar.views.CidadeView;
-
import com.saberprogramar.views.EstadoView;
-
import mx.managers.PopUpManager;
-
import org.swizframework.Swiz;
-
import mx.events.FlexEvent;
-
-
private function chamarCidadeView():void{
-
PopUpManager.createPopUp(this,CidadeView,false);
-
}
-
-
private function chamarEstadoView():void{
-
PopUpManager.createPopUp(this,EstadoView,false);
-
}
-
-
]]>
-
</mx:Script>
-
-
<swiz:SwizConfig
-
strict="true"
-
eventPackages="com.saberprogramar.events"
-
mediateBubbledEvents="true"
-
viewPackages="com.saberprogramar.views"
-
beanLoaders="{[Beans]}"
-
logEventLevel="{LogEventLevel.WARN}"
-
/>
-
-
<mx:Button x="10" y="22" label="Estado" height="52" width="88" click="{chamarEstadoView()}"/>
-
<mx:Button x="10" y="93" label="Cidade" width="88" height="54" click="{chamarCidadeView()}"/>
-
-
</mx:Application>
tá, mas se funcionava antes porque vou fazer isso? explico, está vendo esse viewPackages e eventPackeges, isso é muito importante para usar uma nova Metadata do Swiz, o mediate, tinha na versão anterior mas não era interessante como agora , já que agora conseguimos passar para o nosso Mediate nosso Evento customizado, tudo isso graças a esse atributo eventPackeges. Além disso na 1.0 esse arquivo vai ser mantido pelo que vi, então você estará mais próximo para atualizar quando o mesmo for lançado.
USANDO O MEDIATE
Mas afinal o que é esse Mediate? o Mediate é uma Metadata, assim como usamos o Autowire, que serve para não precisar ficar adicionando escuta de eventos, vamos explicar na prática... vá em "views.action.CidadeAction" na função init temos duas escuta de evento
-
Swiz.addEventListener(CidadeEvent.SAVE,onSaveComplete);
-
Swiz.addEventListener(CidadeEvent.REMOVE,onRemoveComplete);
não precisamos fazer mais isso, pode apagar.. agora vá na função onSaveComplete e coloque o Mediate
-
[Mediate(event="CidadeEvent.SAVE")]
-
public function onSaveComplete(event:CidadeEvent):void{
-
stack.selectedChild = canvasDefault;
-
findAll();
-
}
o mesmo no onRemoveComplete
-
[Mediate(event="CidadeEvent.REMOVE")]
-
public function onRemoveComplete(event:CidadeEvent):void{
-
stack.selectedChild = canvasDefault;
-
findAll();
-
}
e como as duas funções fazem a mesma coisa podemos também utilizar de uma apenas assim:
-
[Mediate(event="CidadeEvent.SAVE")]
-
[Mediate(event="CidadeEvent.REMOVE")]
-
public function onSaveComplete(event:CidadeEvent):void{
-
stack.selectedChild = canvasDefault;
-
findAll();
-
}
só observe que foi necessário modificar o "modificador de acesso" para public, caso contrário não funciona.
Agora sim é isso galera, o swiz está por enquanto atualizado, vi alguns exemplos na internet usando coisas que nunca vi no swiz(Documentação) por isso me retive e mostrei baseado na documentação... seguindo os passos do mesmo..(Os delegates não são mais necessários mas já que está aí resolvi manter). Espero que te ajude e estimule a manter o framework atualizado, porque esse merece seu carinho e atenção
Cumps.
Popularity: 39% [?]

[...] Subscribe to the comments for this post? [...]
[...] This post was mentioned on Twitter by Paulo Fagundes Stos, Janderson F.Cardoso, Janderson F.Cardoso, Felipe, Fabiano Frizzo and others. Fabiano Frizzo said: RT @jandersonfc: : TUTORIAL JAVA+FLEX(9) - Atualizando o Swiz http://bit.ly/6vs3Fu [...]
Janderson, mais uma vez parabens por esse tutorial, e como vc ta dando sequencia nele, tem algumas q eu considero interessantes (melhor dizendo, eu tenho mais dificuldades), que seria tratamento de erros, e o relacionamento OneToMany,(tipo Venda e ItensVenda), onde todos so seriam gravados se nao houvesse nenhum tipo de erro, andei vendo algumas coisa na net, mas acabei nao conseguindo por pra rodar.
obrigado pelo comentário Rener, fico feliz em saber que estou ajudando de alguma forma
Sobre as sugestões são muito válidas, vou preparar um post sobre tratamento de erros e OneToMany, mas antes vou mostra relatórios, estou devendo para uma turma..hehe
Cumps.
Tá blz, o relatorio é algo q aguardo ansioso tbem, so nao havia comentado por que vc ja havia dito q iria mostrar, mas eu to ligadaço nessa sequencia e concerteza tudo que vier será lucro.
Obrigadoooooooo!
Gostaria de parabenizar pelo otimo material. Esta me ajudando a melhorar meu codigo.
Vc falou que nao preciso mais da classe delegate. Nao entendi como poderia retirar o delegate da classe CidadeController por exemplo.
Poderia explicar melhor?
Quem bom que está te ajudadando, fico feliz em saber
então... o delegate nada faz que se comunicar com o RemoteObject, então seria só invocar o remoteObcject direto da controller
Cumps.
Obrigado pela reposta. Tentando contribuir fiz uma alteracao que achei legal;
Criei uma IControler :
public interface IController
{
function findAll():void;
function save(value:Object):void;
function remove(value:Object):void;
}
Agora todas as Interfaces de Controller extende de IController ficando somente o get:
public interface ICidadeController extends IController{
function get cidadeList():ArrayCollection;
}
Lembrar de alterar nas classes que implenta Controller os metodos save/remove como por exemplo na CidadeController :
public function save(cidade:Object)
public function remove(cidade:Object)
Ganhamos com isto menos codigo.
Verificando sua classe delegate vc importa "import mx.rpc.remoting.RemoteObject;"
Gostaria de estar utilizando a propriedade "showBusyCursor=true" que esta presente em RemoteObject so que para isto tenho que trocar para "import mx.rpc.remoting.mxml.RemoteObject;".
Traria algum problema nesta arquitetura?
Estou setando esta propriedade em todas as function por exemplo:
public function findAll():AsyncToken{
estadoService.showBusyCursor=true;
return estadoService.findAll();
}
Teria alguma outra forma de estar setando esta propriedade sem ter que ficar repetindo para todas as function ja que nao sei quando o RemoteObject e criado?
bem,acredito que mudando esse import não trará problema algum; O que vc pode fazer é usar o padrão de projeto Factory, que se baseia em ter uma classe responsavel pela instancia de uma classe (RemoteObject), então toda vez que for usar um remoteObject vc usa essa Factory para gerencia a instancia setando o showBusyCursor=true
Cumps.
Consequi sem fazer nenhuma alteracao.
E so alterar no Beans.mxml por exemplo:
Fica ai a dica....
Teria como postar uma como ficaria a mudança do Swiz do Flex 3 para o Flex 4?
Estou com o problema que talvez alguem saiba como contornar.
Utilizando como no tutorial:
[Mediate(event="CidadeEvent.SAVE")]
[Mediate(event="CidadeEvent.REMOVE")]
Ao utilizar o PopUpManager.removePopUp(TitleWindow) o objeto parece nao ser removido.
Para fazer um teste e so colocar um Alert.show(mesagem) dentro de um metodo que esta com o Metadado Mediate e executar o evento apos utilizar o PopUpManager.removePopUp(TitleWindow) vera que continua respondendo.
Gostario de saver se o swiz tem alguma coisa como removeEventListener.