0

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.

3
  • Do you really have caps in the dataField, or are they typos? Commented Oct 5, 2009 at 11:11
  • Please edit the post to rectify the code formatting. And btw, is the dataField AIRLINE or airLine? Commented Oct 5, 2009 at 11:25
  • @bug-a-lot: I wasn' sure if the datafield were case sensitives. I changed the caps so that I matches the fields in my Java class. @Amarghogh: Sorry for the formatting, but I had issues formatting my code... Don't know why, sometimes, my text just does not want to format... I now changed the dataField, it is now airline (like in the java and actionscript classes). Commented Oct 5, 2009 at 13:12

2 Answers 2

1

1 observation

add getter and setter in CustomClass.java

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.