IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Problème de VO entre Flex et Zend_Amf


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut Problème de VO entre Flex et Zend_Amf
    Bonjour,

    comme annoncé dans le sujet du topic, j'ai un problème avec mes VO. Pour être plus clair ce sont mes classes en Flex et en Php qui sont équivalentes, et qui sont mappées les unes sur les autres lors de chargement de données (SELECT ou INSERT en DB par exemple), pour faciliter la transition des données entre Flex et Php.

    Jusqu'à maintenant, tout fonctionnait bien, c'est-à-dire que je pouvais faire toutes les requêtes que je voulais, sans problème, avec mes VO etc..
    Par contre depuis quelques jours j'ai un soucis : j'ai crée une nouvelle VO, (que l'on appelera VOTest) , j'ai donc les fichiers :

    - VOTest.php côté server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class VOTest{
       public $attribut1;
       public $attribut2;
       ...
    }


    - VOTest.as côté Flex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package org.VO
    {
       [RemoteClass: alias='VOTest']
       [Bindable]
       public class VOTest(attribut1:int,
                                  attribut2:int,
                                  ...)
       {
          this.attribut1 = attribut1;
          this.attribut2 = attribut2;
          ...
       }
     
       public var attribut1:int;
       public var attribut2:int;
       ...
    }
    et mon service TestService.php

    Dorénavant, lorsque je fais dans ma fonction php quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT * FROM ..."
    ...
     
    $tmp = new VOTest();
    $tmp->attribut1 = $result->attribut1;
    $tmp->attribut2 = $result->attribut2;
    ...
    return $tmp;


    j'ai une erreur à l'execution :

    Argument Error in org.vo::VOTest() : Expected x, got 0


    Le problème est que je n'instancie pas directement une VOTest du côté flex, et la ligne new VOTest() dans mon Testservice.php fais naturellement référence à ma classe Php.

    Le problème se résoud lorsque j'enlève la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [RemoteClass: alias='VOTest']
    dans mon VOTest.as : les classes ne sont plus bindées.. et cela marche tout aussi bien (quoique je pense que j'aurai des soucis par la suite si je continue comme ça, et je perds toutes les raisons d'utiliser Zend_Amf ...)


    D'une certaine manière je comprend cette erreur, car le constructeur de VOTest.as demande des arguments...
    Le problème c'est qu'en sortie du service Php je retourne bien une classe avec les attributs remplis... et ce qui m'étonne le plus c'est que tous mes autres services/VO sont faits de la même manière et marchent très bien...

    j'ai fait le test également pour une nouvelle VO et un nouveau service encore une fois, et j'ai toujours l'erreur ici aussi

    Je ne comprend pas ce qui se passe.
    Est-ce que quelqu'un pourrait me venir en aide svp?

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Bonjour,

    Finalement, lorsque l'on mappe les classes .as et .php, même si l'on n'utilise pas explicitement les classes au retour du service (par exemple, quand je récupere une liste d'éléments VOTest de mon service, pour y accéder j'utilise un e.result, sans avoir besoin de le caster, et même sans l'utiliser en tant que VOTest(.as) derriere : je l'utilise en tant qu'ArrayCollection, donc je n'instancie jamais une classe VOTest.as), le mapping se fait implicitement quand même.

    Quoi qu'il en soit il faut donc que le constructeur de la classe utilisée dans le service corresponde avec le constructeur de la classe en as.

    Donc si dans le service on fait un

    il faut que le constructeur de la classe .as puisse accepter des paramètres nuls :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class VOTest(attribut1=0, attribut2=0, ...)
    {
          this.attribut1 = attribut1;
          this.attribut2 = attribut2;
          ...
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de jointure entre 3 tables
    Par Yphon dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 15h58
  2. Problème de jointure entre 2 ou 3 tables
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/08/2005, 12h44
  3. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  4. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo