2009-10-05 4 views
0

J'essaie actuellement de mapper une ArrayList java avec une collection ArrayCollection, via LCDS. Mon application Flex appelle la méthode Java qui renvoie ArrayList, mais je n'ai pas réussi à extraire la ArrayList pour l'afficher dans un DataGrid, côté Flex.Mappage Java ArrayList <CustomClass> et Flex ArrayCollection

JavaSide: J'ai 2 classes: - Jco_test.java: il contient la méthode ArrayList publique tous() - Customclass.java: il contient un constructeur qui initialise certaines variables

public class CustomClass { 

    String airline; 
    String cityFrom; 
    String cityTo; 
    Date flightDate; 
    BigDecimal price; 

    public CustomClass(String s1, String s2, String s3, Date d, BigDecimal bd){ 
     airline = s1; 
     cityFrom = s2; 
     cityTo = s3; 
     flightDate = d; 
     price = bd; 
    }  
} 

Flexside:

  • test.mxml:

     import mx.messaging.AbstractConsumer; 
         import mx.collections.ArrayCollection; 
         import mx.rpc.events.FaultEvent; 
         import mx.rpc.events.ResultEvent; 
         import mx.controls.Alert; 
    
        public var flightList:ArrayCollection; 
    
        public function ResultHandler(event:ResultEvent):void{ 
         flightList = (event.result as ArrayCollection);    
        } 
    
        public function FaultHandler(event:FaultEvent):void{ 
         flightList = new ArrayCollection(); 
         ta.text = "Error id: " + event.fault.errorID + "\n"; 
         ta.text += "String: " + event.fault.faultString + "\n"; 
         ta.text += "Code: " + event.fault.faultCode + "\n"; 
         ta.text += "Detail: " + event.fault.faultDetail + "\n"; 
         ta.text += "Stack: \n" + event.fault.getStackTrace() + "\n"; 
        } 
    

RemoteObject id = "ro" destination = "jco" résultat = "ResultHandler (événement);" fault = "FaultHandler (event);"

<mx:Panel title="monTest" width="699" height="549" x="10"> 
     <mx:Button label="go" click="ro.all();"/> 
     <mx:DataGrid dataProvider="flightList"> 
      <mx:columns> 
       <mx:DataGridColumn dataField="AIRLINE" headerText="Airline" /> 
       <mx:DataGridColumn dataField="CITYFROM" headerText="From" /> 
       <mx:DataGridColumn dataField="CITYTO" headerText="To" /> 
       <mx:DataGridColumn dataField="FLIGHTDATE" headerText="Date" /> 
       <mx:DataGridColumn dataField="PRICE" headerText="Price" /> 
      </mx:columns> 
     </mx:DataGrid> 
     <mx:TextArea id="ta" width="100%" height="219"/>  
    </mx:Panel> 
  • CustomClass.as:

    [Bindable] 
    [RemoteClass(alias="utils.CustomClass")] 
    public class CustomClass{ 
        public var airline:String; 
        public var cityFrom:String; 
        public var cityTo:String; 
        public var flightDate:Date; 
        public var price:String;  
    }  
    

Ai-je fait quelque chose de mal? J'ai encore quelques doutes ... Mon ArrayList n'a pas d'en-têtes. Comment puis-je récupérer les données dans mon DataGridColumn?

Merci pour toute aide que vous pouvez fournir. Cordialement.

(Désolé sur les questions de mise en forme ...)


j'avais en effet oublié le getter et les setters. Maintenant, je peux voir dans le journal du serveur les valeurs que je cherchais. Mais Flex n'est toujours pas capable d'afficher les données.

Voici le journal:

[LCDS]Adapter 'java-object' called 'com.alti.jco.jco_test.all(java.util.Arrays$A 
rrayList (Collection size:0) 
)' 
[LCDS]Result: 'java.util.ArrayList (Collection size:3) 
    [0] = utils.CustomClass 
    cityTo = aa 
    price = 30 
    cityFrom = aa 
    flightDate = Sun Jan 12 00:00:00 CET 1913 
    airline = aa 

    [1] = utils.CustomClass 
    cityTo = bb 
    price = 30 
    cityFrom = bb 
    flightDate = Sun Jan 12 00:00:00 CET 1913 
    airline = bb 

    [2] = utils.CustomClass 
    cityTo = cc 
    price = 30 
    cityFrom = cc 
    flightDate = Sun Jan 12 00:00:00 CET 1913 
    airline = cc 

' 
[LCDS]Serializing AMF/HTTP response 
Version: 3 
    (Message #0 targetURI=/2/onResult, responseURI=) 
    (Externalizable Object #0 'DSK') 
     (Externalizable Object #1 'flex.messaging.io.ArrayCollection') 
     (Array #2) 
      [0] = (Typed Object #3 'utils.CustomClass') 
      cityTo = "aa" 
      price = "30" 
      cityFrom = "aa" 
      flightDate = Sun Jan 12 00:00:00 CET 1913 
      airline = "aa" 
      [1] = (Typed Object #5 'utils.CustomClass') 
      cityTo = "bb" 
      price = "30" 
      cityFrom = "bb" 
      flightDate = (Ref #4) 
      airline = "bb" 
      [2] = (Typed Object #6 'utils.CustomClass') 
      cityTo = "cc" 
      price = "30" 
      cityFrom = "cc" 
      flightDate = (Ref #4) 
      airline = "cc" 
1.254745294734E12 
(Byte Array #7, Length 16) 
(Byte Array #8, Length 16) 
(Byte Array #9, Length 16) 

Je ne suis pas sûr de la sensibilité de cas datafield du DataGridColumn, alors j'ai changé les zones de données pour correspondre à chaque champ.

+0

Avez-vous vraiment des caps dans le dataField, ou sont-ils des fautes de frappe? –

+0

Veuillez modifier la publication pour rectifier la mise en forme du code. Et btw, est le dataField AIRLINE ou airLine? – Amarghosh

+0

@ bug-a-lot: Je ne savais pas si le champ de données était sensible à la casse.J'ai changé les majuscules pour que je corresponde aux champs de ma classe Java. @Amarghogh: Désolé pour le formatage, mais j'ai eu des problèmes de formatage de mon code ... Je ne sais pas pourquoi, parfois, mon texte ne veut tout simplement pas formater ... J'ai maintenant changé le dataField, c'est maintenant la compagnie aérienne (comme dans les classes java et actionscript). –

Répondre

0

Je résolus mes questions =) J'ai eu une erreur de liaison.

Mon dataGrid utilisait "flightList" en tant que dataProvider, mais je ne l'ai pas défini en tant que variable Bindable.

Merci beaucoup pour vos réponses =)

1

1 observation

ajouter getter et setter dans CustomClass.java

+0

Merci pour votre réponse, j'ai résolu une partie de mon problème =) –

Questions connexes