Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/08/2011, 11h26   #1
Invité de passage
 
Homme Léo Gibaud
Développeur informatique
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Léo Gibaud
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Par défaut Probleme divers sur FLEX3

Bonjour,

Je développe actuellement une application et j'utilise les thecnos Hibernate spring blazeds et flex3.
J'ai de grave lacune concernant Flex étant débutant dans ce domaine.

J'aimerai savoir si il existe un moyen de vider un composant recharger de toute les data générer depuis la base de donnée.

voici le composant view stack
Code :
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
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
	width="100%"
	height="100%"
	backgroundAlpha="0"
	xmlns:viewshome="views.home.*"
	styleName="panneauStyle"
	>
 
	<mx:Metadata>
	    [Event(name="deconnexion", type="flash.events.Event")]
	    [Event(name="initialize", type="flash.events.Event")]
	</mx:Metadata>
 
	<mx:Script>
	    <![CDATA[
 
	        private function administration(event:Event):void
            {
 
            	if(adminButton.label=="Administration")
                 {
                 	 dispatchEvent(new Event("initialize")); 
	                 ViewHome.selectedIndex = 1;
	                 adminButton.label="Return"; 
                 }
                 else
                 {
                 	ViewHome.selectedIndex = 0;
                 	adminButton.label="Administration";
                 }   
            }
	        private function deconnexion(event:Event):void
            {
            	 ViewHome.selectedIndex = 0;
            	 adminButton.label="Administration";       
                 dispatchEvent(new Event("deconnexion"));  
            }
 
	   	]]>
	</mx:Script>
	<!--body-->
 
 
	<mx:TitleWindow layout="absolute" styleName="Header" width="1000" height="60">
		<mx:Button id="deconnexionButton" label="Deconnexion" click="deconnexion(event)" x="850" y="21"/>
		<mx:Button id="adminButton" label="Administration" click="administration(event)" x="698" y="21"/>
	</mx:TitleWindow>
	<mx:ViewStack id="ViewHome" resizeToContent="false" width="1000" height="680" y="60">
		<viewshome:accueil id="accueil" width="100%" height="100%" label="Accueil"/>
		<viewshome:admin id="admin" width="100%" height="100%" label="Admin" />
	</mx:ViewStack>	
 
</mx:Canvas>
et une de ces views
Code :
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" backgroundAlpha="0">
 
	<mx:Script>
        <![CDATA[
 
        	import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;  
            import mx.collections.ArrayCollection;
            import mx.events.ListEvent;
            import mx.events.CloseEvent;
 
 			public function initializeAdmin():void
            {
            	returnn();
            }
 
            private function enabledd():void
            {
            	username.enabled=true;
            	password.enabled=true;
            	radioAdminTrue.enabled=true;
            	radioAdminFalse.enabled=true;
            	radioSupplierTrue.enabled=true;
            	radioSupplierFalse.enabled=true;
            	mySubmitButton.enabled=true;
            }
 
            private function disabled():void
            {
            	username.enabled=false;
            	password.enabled=false;
            	radioAdminTrue.enabled=false;
            	radioAdminFalse.enabled=false;
            	radioSupplierTrue.enabled=false;
            	radioSupplierFalse.enabled=false;
            	mySubmitButton.enabled=false;
            }
 
            private function empty():void
            {
            	idUser.text="";
            	username.text="";
            	password.text="";
            	radioAdmin.selectedValue="false";
            	radioSupplier.selectedValue="false";
 
            }
 
            private function createUser():void
            {
            	HeaderForm.label="Create User";
            	buttonDelete.enabled=false;
            	empty();
            	enabledd();
            }
 
            private function createResult(evt:ResultEvent):void
            {
                if(evt.message.body.toString()=="accepted")
                {
                  	Alert.show('Create success','', Alert.OK);
                }
                else
                {
                	Alert.show('User already exist','', Alert.OK);
                }
            }
 
            private function deleteUser():void
            {
            	Alert.show('Are you sure you want delete '+username.text+'?','', Alert.OK| Alert.NO,this,deleteResult);
 
			}
 
            private function deleteResult(event:CloseEvent):void
            {
				if(event.detail == Alert.OK)
				{
					Alert.show('Delete success','', Alert.OK);
					UserImpl.deleteUser(idUser.text);
					returnn();
            		search();
				}
			}
 
            private function returnn():void
            {
            	empty();
            	disabled();
            	buttonCreate.enabled=true;
            	buttonDelete.enabled=false;
            	HeaderForm.label="User";
            }
 
            private function submit():void
            {
            	if((username.text=="")||(password.text==""))
            	{
            		Alert.show('Not fields in','', Alert.OK);
            	}
            	else 
            	{
            		UserImpl.createUser(username.text,password.text,radioAdmin.selectedValue,radioSupplier.selectedValue);
            		returnn();
            		search();
            	} 		
            }
 
           	private function search():void
           	{
           		UserImpl.searchAllUser();
           	}
 
           	private function itemClickEvent(event:Event):void 
           	{
           		HeaderForm.label="User";
           		buttonDelete.enabled=true;
           		disabled();
        	}
 
        ]]>
    </mx:Script>
 
 
	<mx:RemoteObject id="UserImpl" destination="UserImpl">	
		<mx:method name="createUser" result="createResult(event)" />
	</mx:RemoteObject>
 
	<mx:Accordion  width="100%" height="100%">
 
		<mx:Canvas label="User" width="100%" height="100%" creationComplete="search()">
			<mx:DataGrid id="dg" dataProvider="{UserImpl.searchAllUser.lastResult}" x="68" y="64" width="328" height="525" itemClick="itemClickEvent(event);">		 
	            <mx:columns> 
	                <mx:DataGridColumn  dataField="0" headerText="Login"/>
	                <mx:DataGridColumn  dataField="1" headerText="Password"/>
	                <mx:DataGridColumn  dataField="2" headerText="Admin"/>
	                <mx:DataGridColumn  dataField="4" headerText="Supplier"/>
	              </mx:columns>
        	</mx:DataGrid>
 
			<mx:Form x="673" y="64" width="237" height="525" borderStyle="solid" verticalGap="15" horizontalGap="30">
				<mx:FormHeading id="HeaderForm" label="User" paddingTop="10" width="161" height="111"/>
				<mx:FormItem width="193" label="idUser">
					<mx:TextInput id="idUser" enabled="false" width="105" text="{dg.selectedItem[3]}"/>
				</mx:FormItem>
				<mx:FormItem width="193" label="Username">
					<mx:TextInput id="username" enabled="false" width="105" text="{dg.selectedItem[0]}"/>
				</mx:FormItem>
				<mx:FormItem width="193" label="Password">
					<mx:TextInput id="password" enabled="false" width="105" text="{dg.selectedItem[1]}"/>
				</mx:FormItem>
				<mx:FormItem width="193" label="Admin">
					<mx:RadioButtonGroup id="radioAdmin" selectedValue="{dg.selectedItem[2]}"/>
					<mx:RadioButton id="radioAdminTrue" label="true"  enabled="false" value="true" groupName="radioAdmin"/>
					<mx:RadioButton id="radioAdminFalse" label="false" enabled="false" value="false" groupName="radioAdmin"/>			
				</mx:FormItem>
				<mx:FormItem width="193" label="Supplier">
					<mx:RadioButtonGroup id="radioSupplier" selectedValue="{dg.selectedItem[4]}"/>
					<mx:RadioButton id="radioSupplierTrue" label="true"  enabled="false" value="true" groupName="radioSupplier"/>
					<mx:RadioButton id="radioSupplierFalse" label="false" enabled="false" value="false" groupName="radioSupplier"/>			
				</mx:FormItem>
				<mx:FormItem>
            		<mx:Button enabled="false" label="Submit" id="mySubmitButton" 
               		 click="submit();"/>
        		</mx:FormItem>
			</mx:Form>
 
			<mx:Button id="buttonCreate" label="Create User" x="472" y="268"  click="createUser();" width="108"/>
			<mx:Button id="buttonDelete" label="Delete User" enabled="false" x="472" y="321"  click="deleteUser();" width="108"/>
		</mx:Canvas>
 
		<mx:Canvas label="History" width="100%" height="100%">
		</mx:Canvas>
	</mx:Accordion>
 
</mx:Canvas>
J'aimerai pouvoir au rechargement de cette view vider les champ rempli ou tout simplement pouvoir appeler ça méthode returnn depuis le composant view stack.
Je suis ouvert à toute suggestion ou a toute critique concernant mon code merci d'avance.
Gibaud65800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 15h13   #2
Invité de passage
 
Homme Léo Gibaud
Développeur informatique
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Léo Gibaud
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Bonjour,

J'ai réussi à résoudre mon problème en adoptant un architecture plus orienté objet grâce à l'AS3.

J'ai maintenant le problème suivant:

J'essaye de récupérer un Object représentant les paramètres de mon utilisateur sur ma session Flex. Mais j'ai apparamment un problème de Cast du coté Flex et je n'arrive pas à résoudre le soucis.


Coté Serveur je récupère mon utilisateur connecté et je set ces paramètres en session:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public String connectionUser(String login,String password)  throws HibernateException
	{
		String connection= "accepted";
 
		TUser user= searchUser(login, password);
 
		if(user==null)
		{
			connection= "refused";
		}
		else
		{		
			validateLogin(user);
			SessionImpl sessionflex = new SessionImpl();
			SessionUser sessionuser = new SessionUser(user.getId(),user.getLogin(),user.isCAdmin(),user.isCSupplier());
			sessionflex.saveSessionAttribute("ParamSession",sessionuser);
		}
 
		return connection;	
	}

Voici la classe Session:

Code :
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
package service;
 
import dao.seat.SessionUser;
import service.serviceInterface.Session;
import flex.messaging.FlexContext;
import flex.messaging.FlexSession;
 
public class SessionImpl implements Session 
{
	public FlexSession getFlexSession()
	{
		return FlexContext.getFlexSession();
	}
 
	public void destroySession() 
	{
		getFlexSession().invalidate();
	}
 
	public void saveSessionAttribute(String key, SessionUser param) 
	{
		getFlexSession().setAttribute(key, param);
	}
 
	public SessionUser getSessionAttribute(String key)
	{
		SessionUser sessionuse = (SessionUser) getFlexSession().getAttribute(key);
		sessionuse.getSessionInfo();
		return sessionuse;
	}
}
et son bean:
Code :
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
package dao.seat;
 
public class SessionUser 
{
	private Integer iduser;
	private java.lang.String username;
	private boolean admin;
	private boolean supplier;
 
 
	public SessionUser(Integer id, String login, boolean admin, boolean supplier) 
	{
		super();
		this.iduser = id;
		this.username = login;
		this.admin = admin;
		this.supplier = supplier;
	}
 
	public Integer getId()
	{
		return iduser;
	}
	public void setId(Integer id) 
	{
		this.iduser = id;
	}
 
	public java.lang.String getLogin() 
	{
		return username;
	}
 
	public void setLogin(java.lang.String login)
	{
		this.username = login;
	}
 
	public boolean isCAdmin() 
	{
		return admin;
	}
 
	public void setCAdmin(boolean admin) 
	{
		this.admin = admin;
	}
 
	public boolean isCSupplier() 
	{
		return supplier;
	}
 
	public void setCSupplier(boolean supplier) 
	{
		this.supplier = supplier;
	}
 
	public void getSessionInfo()
	{
		System.out.println(iduser+" ; "+username+" ; "+admin+" ; "+supplier);
	}
}
Jusque l'à tout va bien la console m'affiche bien l'utilisateur récupéré.

Le fichier de mapping:
Code :
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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Maps request paths at /messagebroker to the BlazeDS MessageBroker -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <value>
                /*=flexMessageBroker
            </value>
        </property>
    </bean>
 
	<!-- Handler qui va gérer les différents canaux Flex ( AMF, Http ,...) -->
	<bean class="org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter"/>
 
	<!-- Factory qui va créer le broker Flex -->
	<bean id="flexMessageBroker" class="org.springframework.flex.messaging.MessageBrokerFactoryBean" >
		<!-- Configuration du chemin vers le service-config.xml  -->
		<property name="servicesConfigPath" value="/WEB-INF/flex/services-config.xml" />
	</bean>
 
    <bean id="UserImpl" class="service.UserImpl" />
 
    <bean id="user" class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter">
        <property name="messageBroker" ref="flexMessageBroker"/>
        <property name="service" ref="UserImpl"/>
        <property name="serviceId" value="UserImpl"></property>
    </bean>	   
 
    <bean id="SessionImpl" class="service.SessionImpl" />
 
    <bean id="session" class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter">
        <property name="messageBroker" ref="flexMessageBroker"/>
        <property name="service" ref="SessionImpl"/>
        <property name="serviceId" value="SessionImpl"></property>
    </bean>	  
 
</beans>
Et du coté Flex:

Mon bean Session user (identique à celui du coté java):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
package bean
{
	[Bindable]
	public class SessionUser
	{
        public var iduser:Number;
        public var username:String;
        public var admin:Boolean;
        public var supplier:Boolean;
 
	}
}
Et ma classe pour récupérer les infos sur ma session Flex:
Code :
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
package controller
{
	import bean.SessionUser;
 
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
 
	public class Session
	{
		private var remoteSession:RemoteObject;
 
		[Bindable]
		private var sessionuser:SessionUser;
 
		public function Session():void
		{
			remoteSession = new RemoteObject();
			remoteSession.destination="SessionImpl";
			sessionuser = new SessionUser();
		}
 
		public function getSession():SessionUser
		{   
			return sessionuser;
		}	 
 
	    public function getSessionAttribute(key:String):void
	    {
	        remoteSession.getSessionAttribute(key);
	        remoteSession.getSessionAttribute.addEventListener("result", saveSessionAttribute);
	        remoteSession.getSessionAttribute.addEventListener("fault", faultHandler);
	    }
 
	    private function saveSessionAttribute(event:ResultEvent):void 
    	{
    		if(event.result is SessionUser)//Ici le result de ma fonction ne renvoi pas un SessionUser
			{
				sessionuser = event.result as SessionUser;
 
			}
 
 
		}        
 
		public function destroSess():void
		{
			remoteSession.destroySession();
			remoteSession.destroySession.addEventListener("fault", faultHandler);
		}
 
		private function faultHandler(event:FaultEvent):void
    	{
        	Alert.show(event.fault.faultString + "\n" + event.fault.faultDetail, "Error Invoking RemoteObject");
    	} 
	}
}

Si quelqu'un à une idée du pourquoi je n'arrive pas à caster un object SessionUser venant de ma partie Java en Object SessionUser Flex je l'en remercie d'avance.
Gibaud65800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 15h51   #3
Membre habitué
 
Inscription : avril 2010
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 124
Points : 135
Points : 135
Dans ton bean coté flex il faut que tu indiques sur quelle classe Java tu mappes ton objet avec l'annotation RemoteClass.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
package bean
{
	[Bindable]
        [RemoteClass(alias="dao.seat.SessionUser")]
	public class SessionUser
	{
        public var iduser:Number;
        public var username:String;
        public var admin:Boolean;
        public var supplier:Boolean;
 
	}
}
clemoigno est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/08/2011, 17h01   #4
Invité de passage
 
Homme Léo Gibaud
Développeur informatique
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Léo Gibaud
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Merci beaucoup pour ta réponse rapide.

C'était bien ça maintenant flex réussi le cast de l’objet, mais j'ai un nouveau problème. Il rempli tout les paramètres de l'objet à nulls alors que l'utilisateur à bien était récupérer coté java.


Serais tu pourquoi?

Merci d'avance.
Gibaud65800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 11h01   #5
Membre habitué
 
Inscription : avril 2010
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 124
Points : 135
Points : 135
Oui je pense que c'est parce que ton mapping java / as3 est pas top.

Primo, coté Java, si t'as un membre de class iduser comme c'est le cas, écrit un getter getIduser.
Idéalement, idUser et getIdUser serait même un peu plus joli.

Et ensuite, dans ton bean Flex, il faut également écrire les getters/setter correspondants pour que blazeds sache mapper correctement (ce que tu n'as pas fait).

Aisni, dans ton bean flex, il faudrait que tu aies :
Code :
1
2
3
4
5
6
7
8
 
public var idUser:Number;
public function set idUser(value:Number):void{
     this.idUser = value;
}
public function get idUser():Number{
     return this.idUser;
}
Il existe un plugin eclipse issu du projet GraniteDS qui, à partir de ton code java, te génère directement tes beans as3. Il faut nettoyer un tout petit peu le code générer qui a des spécificité graniteDS (alors que toi tu utilises BlazeDs) mais c'est bien pratique. C'est ici.
clemoigno est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web