Сопоставление Java ArrayList ‹CustomClass› и Flex ArrayCollection

В настоящее время я пытаюсь сопоставить java ArrayList с Flex ArrayCollection через LCDS. Мое приложение Flex вызывает метод Java, который возвращает список ArrayList, но мне не удалось получить список ArrayList, чтобы отобразить его в DataGrid на стороне Flex.

JavaSide: у меня есть 2 класса: - Jco_test.java: он содержит метод public ArrayList all () - Customclass.java: он содержит конструктор, который инициализирует некоторые переменные

    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 (событие);" fault = "FaultHandler (событие);"

    <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;       
    }    
    

Я делаю что-то неправильно? У меня все еще есть сомнения ... У моего ArrayList нет заголовков. Как я могу получить данные в моем DataGridColumn?

Спасибо за любую помощь, которую вы можете предоставить. С Уважением.

(Извините за проблемы с форматированием ...)


Я действительно забыл геттер и сеттеры. Теперь я могу видеть в журнале сервера значения, которые искал. Но Flex по-прежнему не может отображать данные.

Вот журнал:

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

Я не уверен в чувствительности к регистру поля данных DataGridColumn, поэтому я изменил поля данных, чтобы они соответствовали каждому полю.


person BS_C3    schedule 05.10.2009    source источник
comment
У вас действительно есть заглавные буквы в dataField, или это опечатки?   -  person bug-a-lot    schedule 05.10.2009
comment
Пожалуйста, отредактируйте сообщение, чтобы исправить форматирование кода. Кстати, это dataField AIRLINE или airLine?   -  person Amarghosh    schedule 05.10.2009
comment
@ bug-a-lot: я не был уверен, что поле данных чувствительно к регистру. Я изменил заглавные буквы, чтобы они соответствовали полям в моем классе Java. @Amarghogh: Извините за форматирование, но у меня были проблемы с форматированием моего кода ... Не знаю, почему иногда мой текст просто не хочет форматироваться ... Теперь я изменил dataField, теперь это авиакомпания (как в классы java и actionscript).   -  person BS_C3    schedule 05.10.2009


Ответы (2)


1 наблюдение

добавить геттер и сеттер в CustomClass.java

person Rahul Garg    schedule 05.10.2009

Решил свои проблемы =) У меня была ошибка привязки.

В моем dataGrid в качестве dataProvider использовался flightList, но я не определял его как переменную Bindable.

Большое спасибо за ответы =)

person BS_C3    schedule 05.10.2009