views:

3785

answers:

3

Hello Community!

I'm currently trying to map a java ArrayList with a Flex ArrayCollection, through LCDS. My Flex application does call the Java method that returns the ArrayList, but I haven't managed to retrieve the ArrayList to display it in a DataGrid, on Flex side.

JavaSide: I have 2 classes: - Jco_test.java: it contains the method public ArrayList all() - Customclass.java: it contains a constructor that initializes some 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" result="ResultHandler(event);" 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;       
    }
    

Am I doing something wrong? I still have some doubts... My ArrayList does not have headers. How can I retrieve the data in my DataGridColumn?

Thanks for any help you can provide. Regards.

(Sorry about the formatting issues...)


I had indeed forgotten the getter and the setters. Now, I can see in the server log the values I was looking for. But Flex is still not able to display the Data.

Here is the log:

[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)

I'm not sure about the DataGridColumn's datafield case sensitivity, so I changed the datafields to match each field.

+1  A: 

1 observation

add getter and setter in CustomClass.java

Rahul Garg
Thanks for your answer, I solved part of my issue =)
BS_C3
A: 

Hi!

I resolved my issues =) I had a binding mistake.

My dataGrid was using "flightList" as the dataProvider, but I did not define it as a Bindable variable.

Thanks a lot for your answers =)

BS_C3
A: 

Hey I have one question that variable u define in CustomClass.java and in CustomClass.as must be same?I mean on what basis flex will map value according to java?

hetal
Every variables you want to send to flex from java (and viceversa) have to have the same spelling, case and the types must be equivalent. And don't forget the getter/setter. Otherwise, you won't get your data.Regards.
BS_C3