Ben een website aan het maken met een java/MySql backend en wil Flex gebruiken als front-end.
Ik ben vrij nieuw met flex. Java is normaal geen probleem.
Het probleem dat ik heb doet zich voor bij het doorsturen van embedded objecten van java naar flex.
Ik wil dus aan ArrayList van objecten doorsturen waarvan elk object op zich ook nog een ArrayList aan objecten heeft.
Ik gebruik eclipse met de flexbuilder plugin om mijn project te ontwikkelen. Maak gebruik van BlazeDs en een tomcat v5.5 server
Wanneer ik nu de ro.getPlates() zal uitvoeren bij de initialisatie van de pagina zal de functie in java worden opgeroepen en het resultaat naar de getPlatesResultHandler functie in de pagina sturen. Nu het result is een lijst van objecten maar ik van het moment ik dit cast naar een Plate.as object gaat de code niet meer verder. (Opgemerkt door alerts toe te veogen). Hier moet dus ergens iets fout lopen.Kan iemand me daar mee helpen want zit echt geblokkeerd voor de moment.
De meeste code staat onderaan. Indien er meer info nodig is laat je maar weten
Zal nu deeltjes code geven.
Mijn java classes.
//Deze class zal als interface met flex dienen. De Methode die via flex zal opgeroepen worden is getPlates();
public class FlexCommunicator {
...
//Deze methode geeft een ArrayList met Plate objecten terug
public ArrayList<Plate> getPlates(){
return plateMngr.getPlates();
}
..
}
De Plate class heeft 2 attributen
- een String
- een ArrayList van Comment objecten
public class Plate {
private String plateNb;
private ArrayList comments = new ArrayList();
......
//getters en setters
}
De remoting-config.xml bevat ook nog dit voor de mapping tussen flex en java
<destination id="FlexComm">
<properties>
<source>flexInterface.FlexCommunicator</source>
</properties>
</destination>
Flex files
Bij het initialiseren van de pagina zal de functie ro.getPlates() opgeroepen worden. Hierdoor zou plates opgevuld worden met een lijst van Plate objecten.
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="ro.getPlates()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import Plate;
private function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.faultString, "Beleze");
}
[Bindable]
private var comments:ArrayCollection;
[Bindable]
private var plates:ArrayCollection;
private function getCommentsResultHandler(event:ResultEvent):void {
comments = event.result as ArrayCollection;
}
private function getPlatesResultHandler(event:ResultEvent):void{
var tempPlates: ArrayCollection;
tempPlates = event.result as ArrayCollection;
for(var i:int =0; i<tempPlates.length;i++){
var plate: Plate
plate=tempPlates.getItemAt(i) as Plate;
plates.addItem(plate);
}
}
]]>
</mx:Script>
<mx:RemoteObject id="ro" destination="FlexComm" >
<mx:method name="getPlates" fault="faultHandler(event)" result="getPlatesResultHandler(event)" />
<mx:method name="getComments" fault="faultHandler(event)" result="getCommentsResultHandler(event)"/>
</mx:RemoteObject>
<mx:Repeater dataProvider="plates" id="plateList">
<mx:Text text="{plateList.currentItem.plateNb}"/>
</mx:Repeater>
...
</mx:Canvas>
Plate.as
package
{
import mx.collections.ArrayCollection;
public class Plate
{
[Bindable]
[RemoteClass(alias="plate.Plate")]
public var plateNb:String;
public var comments:ArrayCollection;
}
}
Ik ben vrij nieuw met flex. Java is normaal geen probleem.
Het probleem dat ik heb doet zich voor bij het doorsturen van embedded objecten van java naar flex.
Ik wil dus aan ArrayList van objecten doorsturen waarvan elk object op zich ook nog een ArrayList aan objecten heeft.
Ik gebruik eclipse met de flexbuilder plugin om mijn project te ontwikkelen. Maak gebruik van BlazeDs en een tomcat v5.5 server
Wanneer ik nu de ro.getPlates() zal uitvoeren bij de initialisatie van de pagina zal de functie in java worden opgeroepen en het resultaat naar de getPlatesResultHandler functie in de pagina sturen. Nu het result is een lijst van objecten maar ik van het moment ik dit cast naar een Plate.as object gaat de code niet meer verder. (Opgemerkt door alerts toe te veogen). Hier moet dus ergens iets fout lopen.Kan iemand me daar mee helpen want zit echt geblokkeerd voor de moment.
De meeste code staat onderaan. Indien er meer info nodig is laat je maar weten
Zal nu deeltjes code geven.
Mijn java classes.
//Deze class zal als interface met flex dienen. De Methode die via flex zal opgeroepen worden is getPlates();
public class FlexCommunicator {
...
//Deze methode geeft een ArrayList met Plate objecten terug
public ArrayList<Plate> getPlates(){
return plateMngr.getPlates();
}
..
}
De Plate class heeft 2 attributen
- een String
- een ArrayList van Comment objecten
public class Plate {
private String plateNb;
private ArrayList comments = new ArrayList();
......
//getters en setters
}
De remoting-config.xml bevat ook nog dit voor de mapping tussen flex en java
<destination id="FlexComm">
<properties>
<source>flexInterface.FlexCommunicator</source>
</properties>
</destination>
Flex files
Bij het initialiseren van de pagina zal de functie ro.getPlates() opgeroepen worden. Hierdoor zou plates opgevuld worden met een lijst van Plate objecten.
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="ro.getPlates()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import Plate;
private function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.faultString, "Beleze");
}
[Bindable]
private var comments:ArrayCollection;
[Bindable]
private var plates:ArrayCollection;
private function getCommentsResultHandler(event:ResultEvent):void {
comments = event.result as ArrayCollection;
}
private function getPlatesResultHandler(event:ResultEvent):void{
var tempPlates: ArrayCollection;
tempPlates = event.result as ArrayCollection;
for(var i:int =0; i<tempPlates.length;i++){
var plate: Plate
plate=tempPlates.getItemAt(i) as Plate;
plates.addItem(plate);
}
}
]]>
</mx:Script>
<mx:RemoteObject id="ro" destination="FlexComm" >
<mx:method name="getPlates" fault="faultHandler(event)" result="getPlatesResultHandler(event)" />
<mx:method name="getComments" fault="faultHandler(event)" result="getCommentsResultHandler(event)"/>
</mx:RemoteObject>
<mx:Repeater dataProvider="plates" id="plateList">
<mx:Text text="{plateList.currentItem.plateNb}"/>
</mx:Repeater>
...
</mx:Canvas>
Plate.as
package
{
import mx.collections.ArrayCollection;
public class Plate
{
[Bindable]
[RemoteClass(alias="plate.Plate")]
public var plateNb:String;
public var comments:ArrayCollection;
}
}