Após fazer o login da Aplicação tenho que armazenar o objeto usuário para que na próxima tela seja carregado um TextInput.
Não estou conseguindo passar objeto do Java para o Flex:
UsuarioDAO:
package com.fdc.remota;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
public class UsuarioDAO {
private Session session;
private Transaction tx;
public Usuario autenticar(String login, String senha)
throws Exception {
try {
this.session = HibernateUtil.getSessionFactory().openSession();
this.tx = this.session.beginTransaction();
Usuario usuario = (Usuario) this.session.createCriteria(Usuario.class)
.add(Restrictions.eq("login", login))
.add(Restrictions.eq("senha", senha)).uniqueResult();
return usuario;
} catch (Exception e) {
e.printStackTrace();
throw new Exception();
} finally {
this.session.close();
}
}
public void pingSessao()
{
}
}
UsuarioService
package com.fdc.remota;
import java.util.List;
public class UsuarioService {
private UsuarioDAO usuarioDAO = new UsuarioDAO();
public Usuario autenticar(String login, String senha)
throws Exception {
Usuario usuario = usuarioDAO.autenticar(login, senha);
try {
if (usuario == null)
throw new UsuarioNaoExisteException(
"Não foi possível se conectar, pois o usuário ou a senha está incorreto.");
else {
System.out.println(usuario.getNmCliente());
return usuario;
}
} catch (UsuarioNaoExisteException e) {
throw new UsuarioNaoExisteException(e.getMensagem());
} catch (Exception e) {
e.printStackTrace();
throw new Exception();
}
}
}
Action Script Usuario.AS
package com.fdc.remota.vo
{
[RemoteClass(alias="com.fdc.remota.Usuario")]
[Bindable]
public class Usuario
{
public function Usuario()
{
}
public var cdCliente:Number
public var login:String
public var nmCliente:String
public var senha:String
public var dispositivo:String
}
}
Login.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="onCreationComplete()"
width.State1="1154" height.State1="132">
<s:states>
<s:State name="State1"/>
<s:State name="aplicacao"/>
</s:states>
<fx:Declarations>
<s:RemoteObject id="usuarioService"
destination="usuarioService"
fault="onFault(event)">
<s:method name="autenticar" result="onResultAutenticar(event)" />
</s:RemoteObject>
</fx:Declarations>
<s:Panel width="200" height="150" title="Login"
horizontalCenter="54" verticalCenter="194" includeIn="State1">
<s:Label x="10" y="24" text="Login
" width="37"
textAlign="right"/>
<s:TextInput id="login"
x="56" y="14"/>
<s:Label x="10" y="54" text="Senha"/>
<s:TextInput id="senha"
x="56" y="44"/>
<s:Button id="btEntrar"
x="114" y="80" label="Entrar"
click="autenticar()"/>
</s:Panel>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var timer:Timer;
private function onCreationComplete():void
{
timer = new Timer(1000 * 50, 0);
timer.addEventListener( TimerEvent.TIMER, onTimer );
timer.start();
}
private function onTimer(event:TimerEvent):void
{
usuarioService.pingSessao();
}
private function autenticar():void
{
usuarioService.autenticar(login.text, senha.text);
}
private function onFault(event:FaultEvent):void
{
Alert.show(event.fault.rootCause.mensagem);
}
private function onResultAutenticar(event:ResultEvent):void
{
var telaconsumo: Consumo = Consumo(PopUpManager.createPopUp(this, Consumo, true));
PopUpManager.centerPopUp(telaconsumo);
}
]]>
</fx:Script>
</s:Group>
Consumo.mxml (Nesta tela tenho que carregar o objeto Usuario)
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="512" height="506"
creationComplete="getConsumo();"
>
<fx:Declarations>
<s:RemoteObject id="consumoService"
destination="consumoService"
fault="onFault(event)">
<s:method name="getConsumo" result="onResultAutenticar(event)"/>
</s:RemoteObject>
</fx:Declarations>
<s:Panel width="512" title="Visualização de Consumo On-Line">
<mx:DataGrid x="-1" y="40" width="253" height="416" id="dataGrid" dataProvider="{consumo}">
<mx:columns>
<mx:DataGridColumn headerText="Dia" dataField="data" />
<mx:DataGridColumn headerText="Consumo" dataField="consumo"/>
</mx:columns>
</mx:DataGrid>
<s:Button x="10" y="10" label="Visualizar Consumo Diário" id="vconsumo" enabled="{dataGrid.selectedItem}" click="vConsumoDiario()"/>
<s:Button x="218" y="-27" label="Carregar Consumo" id="cConsumo" click="getConsumo()"/>
<s:TextInput x="372" y="40" id="nmCliente" text="{usuario.nmCliente}"/>
</s:Panel>
<fx:Script>
<![CDATA[
import com.fdc.remota.vo.ConsumoTotal;
import com.fdc.remota.vo.Usuario;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
[Bindable]
public var consumo:ArrayCollection;
[Bindable]
public var usuario:Usuario;
private function onTimer(event:TimerEvent):void
{
consumoService.pingSessao();
}
private function onFault(event:FaultEvent):void
{
Alert.show(event.fault.rootCause.mensagem);
}
private function onResultAutenticar(event:ResultEvent):void
{
consumo = event.result as ArrayCollection;
}
private function getConsumo():void
{
consumoService.getConsumo();
}
private function vConsumoDiario():void {
var titleWindow:ConsumoDiario = ConsumoDiario(PopUpManager.createPopUp(this, ConsumoDiario, true));
titleWindow.setStyle("borderAlpha", 0.9);
titleWindow.consumos = dataGrid.selectedItem as ConsumoTotal;
}
]]>
</fx:Script>
</s:Group>