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 :

Passer un paramètre à un composant.


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut Passer un paramètre à un composant.
    Bonjour,
    J'ai créé un compoSANT me permettant de charger automatiquement une datagrid avec des données issue d'un serveur distant.
    Pour l'instant, le serveur web renvoie comme réponse une liste de données XML. Si je passe pas de paramètre ça renvoie tout. Mais des fois j'ai besoins de passer un paramètre selon là ou je me trouve.

    Ma question est de savoir comment passer un paramètre de type GET depuis l'application qui lui va le transmettre au composant et du composant il le renvoie au HTTPService.
    Application->Composant->HttpService->Serveur web->réponse:XMLListe.

    On m'a parlé d'utiliser un setteur et getteur. J'ai cherché sur internet et dans mon livre mais ils en parle pas clairement.
    Voici le code du composant.
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="dataServiceWarehouse.send()">
     
     
    	<mx:Script>
    		<![CDATA[
    			import mx.collections.ArrayCollection;
    			import mx.rpc.events.FaultEvent;
    			import mx.rpc.events.ResultEvent;
    			import mx.controls.Alert;
     
     
    	/*		var idWarehouse:int;
     
    			public function set setIdWarehouse(p_idWarehouse:int):void{
    				idWarehouse = p_idWarehouse;
    			}				
    		*/	
     
     
    			public function onSuccess(e:ResultEvent):void{			
    				DGWarehouse.dataProvider = XMLList(e.result).items.item;																	
    			}		
     
    			public function onError(e:FaultEvent):void{
    				Alert.show(String(e.fault.faultDetail));
    			}			
    		]]>
    	</mx:Script>
     
    	<mx:HTTPService 
    		id="dataServiceWarehouse" 
    		url="http://127.0.0.1/zorha/Admin/scripts/php/test.php?idwarehouse=2" 		
    		useProxy="false" 
    		resultFormat="xml"
    		result="onSuccess(event)"
    		fault="onError(event)"/>	
     
     
    	<mx:DataGrid id="DGWarehouse" rowCount="10">
    		<mx:columns>
    			<mx:DataGridColumn dataField="idwarehouse" headerText="idwarehouse" width="100"/>
    		    <mx:DataGridColumn dataField="warehouse"   headerText="name"        width="100"/>
    			<mx:DataGridColumn dataField="description" headerText="description" width="100"/>
    		</mx:columns>
    	</mx:DataGrid>
    	<mx:ControlBar>
    		<mx:Button label="Create warehouse" id="crtWarehouse"/>
    		<mx:Spacer width="100%"/>
    		<mx:Button label="Delete warehouse" id="dltWarehouse"/>
    	</mx:ControlBar>	
    </mx:Panel>
    Et le code de l'application qui l'appelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:local="*" backgroundColor="#FFFFFF">	
    	<local:DataGridWarehouse id="dg" title="Liste of product warehouse"/>
    </mx:Application>
    Merci

  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
    Salut,

    C'est dans ton url le idWarehouse que tu n'arrives pas à passer ?

    Si ton set ne marche pas cela peut venir de la façon dont tu l'as écrit. Il te faut plutôt suivre cette nomenclature :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private var _idWarehouse:int;
    public function set idWarehouse(id:int):void{_idWarehouse = id;}
    public function get idWarehouse():int{return _idWarehouse;}
    comme ça tu peux appeler directement ta variable idWarehouse, sans te soucier de la fonction set ou get

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        ... = idWarehouse;
        idWarehouse = ...;
    Note : les getter, le setter et la declaration private ne sont pas obligatoires, néanmoins avec ceci tu es thread safe, tu n'accède qu'à la variable de l'instance que tu souhaite.

    Ce que tu peux faire dans ton code as c'est quelquechose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dataServiceWarehouse.url = "http://127.0.0.1/zorha/Admin/scripts/php/test.php?idwarehouse=" + idWarehouse.ToString();
    -----------------------------------------------------------------------

    ou bien tu peux setter directement l'url depuis l'extérieur (vérifie que tu n'aies pas un warning par contre te disant que le binding avec la variable risque de planter):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Bindable]
    private var _HTTPServiceUrl:int;
    public function set HTTPServiceUrl(id:int):void{
       _HTTPServiceUrl = "http://127.0.0.1/zorha/Admin/scripts /php/test.php?idwarehouse=" + id.ToString();
    }
    public function get HTTPServiceUrl():int{return _HTTPServiceUrl;}
    et ensuite dans ton service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <mx:HTTPService 
    		id="dataServiceWarehouse" 
    		url="{HTTPServiceUrl}" 		
    		useProxy="false" 
    		resultFormat="xml"
    		result="onSuccess(event)"
    		fault="onError(event)"/>

  3. #3
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut
    Bonjour et merci pour ton intervent.
    Vois-tu, cette nuit j'ai pas arrêté de penser à ce problème et la nuit m'a porté conseil. Ce matin, en me levant de bonne heure j'ai cherché et j'ai été me recueillir à genoux devant "mon amie Google" . En cherchant à gauche et à droite j'ai finie par comprendre et j'en suis arrivé à ta première proposition.

    Plutôt que de lire le code indigeste je vais expliquer un peut. J'ai fais, comme tu le propose, un getter et setter sur une variable. De la, j'ai ajouter un paramètre du nom du getter à ma balise qui appelle le module depuis l'application.
    J'ai déclarer une autre variable qui est ParamsID qui est du type objet et j'utilise la méthode send() du mon HTTPService. Et quelques petit tour de passe passe et hope j'ai mon composant qui fonctionne de manière autonome.

    Composant
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="SendHTTP()">
     
     
    	<mx:Script>
    		<![CDATA[
    			import mx.collections.ArrayCollection;
    			import mx.rpc.events.FaultEvent;
    			import mx.rpc.events.ResultEvent;
    			import mx.controls.Alert;
     
     
    			private var idWarehouse:String;
    			public var paramsID:Object = {};
     
    			public function set WarehouseID(pidWarehouse:String):void{
    				this.idWarehouse = pidWarehouse;
    			}				
     
    			public function get WarehouseID():String{
    				return this.idWarehouse;
    			}
     
     
    			public function onSuccess(e:ResultEvent):void{				
    				DGWarehouse.dataProvider = XMLList(e.result).items.item;																					
    			}		
     
    			public function onError(e:FaultEvent):void{
    				Alert.show(String(e.fault.faultDetail));
    			}			
     
    			public function SendHTTP():void{
    				Alert.show(this.WarehouseID);
    				paramsID["idwarehouse"] = this.WarehouseID;
    				dataServiceWarehouse.send(paramsID);
    			}		
    		]]>
     
     
    	</mx:Script>
     
    	<mx:HTTPService 
    		id="dataServiceWarehouse" 
    		url="http://127.0.0.1/zorha/Admin/scripts/php/test.php" 		
    		useProxy="false" 
    		resultFormat="xml"
    		result="onSuccess(event)"
    		fault="onError(event)"/>	
     
     
    	<mx:DataGrid id="DGWarehouse" rowCount="10">
    		<mx:columns>
    			<mx:DataGridColumn dataField="idwarehouse" headerText="idwarehouse" width="100"/>
    		    <mx:DataGridColumn dataField="warehouse"   headerText="name"        width="100"/>
    			<mx:DataGridColumn dataField="description" headerText="description" width="100"/>
    		</mx:columns>
    	</mx:DataGrid>
    	<mx:ControlBar>
    		<mx:Button label="Create warehouse" id="crtWarehouse"/>
    		<mx:Button label="Reload" click="dataServiceWarehouse.send()" id="rldWarehouse" />		
    	</mx:ControlBar>	
    </mx:Panel>
    Application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:local="*" backgroundColor="#FFFFFF">	
    	<local:DataGridWarehouse id="dg" title="Liste of product warehouse" WarehouseID="1"/>	
    </mx:Application>
    En tout cas merci de m'avoir confirmé que j'étais pas dans la mauvaise voie.

  4. #4
    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
    Pas de soucis, c'est cool que tu aies réussi

    Par contre, comme j'avais mis, c'est plus une bonne pratique (je veux pas dire de bêtise mais je crois que c'est la norme (si tu es porté là dessus ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private var _idWarehouse:int;
    public function set idWarehouse(id:int):void{_idWarehouse = id;}
    public function get idWarehouse():int{return _idWarehouse;}
    avec un _ pour ta variable et le même nom sans le _ pour le getter et setter. (ça t'évite de te tromper en plus)
    Je vérifierai (ou si quelqu'un a la réponse)...en tous cas ça marche pareil

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut
    Citation Envoyé par Krazymins Voir le message
    Pas de soucis, c'est cool que tu aies réussi

    Par contre, comme j'avais mis, c'est plus une bonne pratique (je veux pas dire de bêtise mais je crois que c'est la norme (si tu es porté là dessus ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private var _idWarehouse:int;
    public function set idWarehouse(id:int):void{_idWarehouse = id;}
    public function get idWarehouse():int{return _idWarehouse;}
    avec un _ pour ta variable et le même nom sans le _ pour le getter et setter. (ça t'évite de te tromper en plus)
    Je vérifierai (ou si quelqu'un a la réponse)...en tous cas ça marche pareil
    Non je pense que tu as raison parce que j'ai vu cela partout. Je vais le modifier ainsi que d'autre petit détails afin que ça soit plus propre.
    Merci encore

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Note : les getter, le setter et la declaration private ne sont pas obligatoires, néanmoins avec ceci tu es thread safe, tu n'accède qu'à la variable de l'instance que tu souhaite.
    Juste par soucis de clarté : l'utilisation des getter/setter pour accéder à la propriété d'un objet au lieu d'un accès direct à une variable public n'a rien à voir avec le côté "thread safe" de l'application. Et dans les deux cas on accède bien à la variable de l'instance.
    En dehors du fait que le Player Flash est MONO THREAD, je ne vois pas très bien ce que veut dire Krazymins...

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 08/12/2010, 00h43
  2. passer des paramétres à un fichier sql
    Par vbcasimir dans le forum Oracle
    Réponses: 2
    Dernier message: 21/12/2004, 18h08
  3. Passer en paramètre d'une fonction (...)
    Par Captain_JS dans le forum C++
    Réponses: 5
    Dernier message: 03/11/2004, 07h18
  4. Passer en paramètre un chemin dans redirection
    Par croco83 dans le forum ASP
    Réponses: 5
    Dernier message: 07/05/2004, 08h30
  5. [struts] passer un paramètre de page via un findForward
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 08/03/2004, 17h35

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