Il est possible grâce au LiveCycle Data Service ES de faire tourner une application Flex sur une plateforme J2EE. On peut sérialiser les objets en particulier les JavaBeans pour les envoyer à la partie cliente c'est à dire à Flex. La sérialisation est bien évidemment soumis à des contraintes comme par exemple: pour chaque propriété, il faut définir le getter et le setter associés.
Cependant la sérialisation ne prend pas en compte les enums de Java 1.5. En effet, ils n'existent pas en ActionScript 3. Après quelques recherches, je suis tombée sur ce blog qui propose une solution qui marche très bien je peux vous l'assurez. En gros, ils ont défini une couche supplémentaire côté Java qui permet de prendre en compte les enums. Ils proposent également côté Flex deux classes EnumBase et EnumClass permettant de créer des enums en ActionScript 3.
lundi 24 mars 2008
vendredi 21 mars 2008
Trier une colonne d'une datagrid
Flex permet de redéfinir le tri des données sur une datagrid.
Voici un exemple très simple d'une DataGrid donnant les informations de la météo:
Exemple
Si on clique sur le titre "Temps" de la colonne Flex va ordonner les données à sa façon. Mais ce n'est pas ce que l'on souhaite, on voudrait l'ordre suivant Pluie > Variable > Soleil.
On va donc utiliser la propriété sortCompareFunction qui prend comme valeur une fonction dont la signature est la suivante compareTo(obj1:Object, obj2:Object):int.
A partir de cette fonction la datagrid va réaliser le tri adequat.
Voici un exemple très simple d'une DataGrid donnant les informations de la météo:
Exemple
Si on clique sur le titre "Temps" de la colonne Flex va ordonner les données à sa façon. Mais ce n'est pas ce que l'on souhaite, on voudrait l'ordre suivant Pluie > Variable > Soleil.
On va donc utiliser la propriété sortCompareFunction qui prend comme valeur une fonction dont la signature est la suivante compareTo(obj1:Object, obj2:Object):int.
A partir de cette fonction la datagrid va réaliser le tri adequat.
private function compareTo(obj1:Object, obj2:Object):int
{
if(obj1.temps == obj2.temps)
{
return 0; // en cas d'egalité on retourne 0
}
else
{
if(obj1.temps == "Soleil")
{
return -1; // Soleil < obj2
}
else
{
if(obj1.temps == "Pluie")
{
return 1; // Pluie > obj1
}
else
{
if(obj2.temps == "Soleil")
{
return 1; // Variable > Soleil
}
else
{
return -1; // Variable < Pluie
}
}
}
}
}
ErrorArgument #2004
Il s'agit d'une erreur retournée par Flex lorsque celui ci ne reconnait pas un objet. Malheureusement cela peut arriver plus souvent qu'on peut croire. FlexBuilder ne compile pas toutes les classes mais uniquement celles qui sont instanciées et appelées. C'est à dire que si vous déclarez une classe Person mais qu'à aucun moment vous ne faites appel à cette classe vous pouvez tomber sur cette erreur. J'ai trouvé ce blog qui l'expliquait mais vu mes lacunes en anglais, je n'avais pas tout de suite compris le problème. En résumé lorsque vous avez cette erreur, assurez vous de bien avoir votre classe instanciée quelque part dans votre Main.mxml par exemple.
Inscription à :
Articles (Atom)