sexta-feira, 5 de outubro de 2007

Adobe Flex enviando parametros para a aplicação web em Java

eis um grande problema quando estamos utilizando o Adobe Flex, como enviar de modo que funcione parametros para nossa aplicação java, segue uma dica de como fazer para enviar os parametro de forma que funcione para aplicações que utilizam o Struts 2 ou o Mentawai na aplicação que roda no servidor (pelo menos nos testes que eu fiz funcionou...)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
  
  <mx:Script>
    <![CDATA[
      
      import mx.controls.Alert;
      import mx.rpc.events.ResultEvent;
      import mx.rpc.events.FaultEvent;
      import mx.utils.ObjectUtil;
      import mx.rpc.http.HTTPService;
      
       public function getLoginParameters():Object {
              return {
                "user.login": loginField.text, 
                "user.password" : passwordField.text 
              };
            }
      
      public function enviarDados()void {                          
        userRequest.sendthis.getLoginParameters() );          
      }
      
        public function onSuccess(event:ResultEvent):void {
    
        Alert.showXML(event.result) );
    
        //cria String baseado no resultado
        var rawData:String = String(event.result);
        
        Alert.showrawData );              
        }
    
        public function onError(event:FaultEvent):void {
            Alert.show(ObjectUtil.toString(event.fault));
        }      
            
    ]]>
  </mx:Script>
  
  <mx:HTTPService id="userRequest" 
     url="http://localhost:8080/mentawai_teste/FlexAction.loginXML.mtw" 
     result="onSuccess(event)"
    fault="onError(event)"
    resultFormat="e4x"
    method="POST"/>

   <mx:Panel width="300" height="154" layout="absolute" horizontalCenter="0" verticalCenter="11" title="Login">
      <mx:Form width="100%" height="100" x="0" y="0">
         <mx:FormItem label="Login">
            <mx:TextInput id="loginField"/>
         </mx:FormItem>
         <mx:FormItem label="Password">
            <mx:TextInput id="passwordField"/>
         </mx:FormItem>
      </mx:Form>
      <mx:Button y="84" label="OK" horizontalCenter="0" id="sendBtn" click="enviarDados()"/>
      <mx:Label x="10" y="96" text="{loginField.text}" enabled="false"/>
      <mx:Label x="174" y="96" text="?" enabled="false"/>
   </mx:Panel>
  
</mx:Application>

Observe: a function getLoginParameters():Object, aqui está a questão, o formato que finalmente funcionou para envio dos parametros de forma que chegassem corretamente no servidor, sem nenhum erro inesperado...

onde a comunicação com o servidor é efetuada através do componente : mx:HTTPService, sendo que neste caso utilizei retorno em XML como resultado da execução da action

---

quanto a aplicação em java eu tenho na minha classe action o respectivo atributo setado na classe:

private UserBean user;

onde a estrutura dessa classe é:
public class UserBean {

  private String login;
  private String password;
  
  public String getLogin() {
    return login;
  }
  public void setLogin(String login) {
    this.login = login;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  
}

bom fica ae a dica para conseguir enviar parametros do Flex para sua aplicação em java ;)