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

GWT et Vaadin Java Discussion :

L'appel du RPC se charge en dernier


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Par défaut L'appel du RPC se charge en dernier
    Salut

    j'ai une methode :

    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
    	private Document getXmlData() {
     
    		greetingService.getCountriesList(new AsyncCallback<String>() {
    			@Override
    			public void onSuccess(String result) {
    				MessageBox.alert(result);
    				xmlDoc = XMLParser.parse(result);
     
    			}
     
    			@Override
    			public void onFailure(Throwable caught) {
    				MessageBox.alert(caught.getMessage());
     
    			}
    		});
    		return xmlDoc;
     
    	}
    OnmduleLoad():
    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
     
     
    		Document doc = getXmlData();
    //
    //		Element treeNode = doc.getDocumentElement();
    //		NodeList nodes = treeNode.getChildNodes();
    //		Tree tree = new Tree();
    //		TreeNode node = new TreeNode();
     
     
    		Panel panel = new Panel();
    		panel.setBorder(false);
    		panel.setPaddings(15);
     
    		final TreePanel treePanel = new TreePanel();
    		treePanel.setWidth(240);
    		treePanel.setHeight(400);
    		treePanel.setTitle("Editable Tree");
    		treePanel.setAnimate(true);
    		treePanel.setEnableDD(true);
    		treePanel.setContainerScroll(true);
    		treePanel.setRootVisible(true);
     
    		final XMLTreeLoader loader = new XMLTreeLoader();
    		loader.setDataUrl(getXmlData().toString());
    		loader.setMethod(Connection.GET);
    		loader.setRootTag("countries");
    		loader.setLeafTag("country");
    		loader.setAttributeMappings(new String[] { "@title" });
     
    		final AsyncTreeNode root = new AsyncTreeNode("Countries", loader);
    		treePanel.setRootNode(root);
     
    		root.expand();
    		treePanel.expandAll();
     
    		treePanel.addTool(new Tool(Tool.REFRESH, new Function() {
     
    			public void execute() {
    				treePanel.getEl().mask("Loading", "x-mask-loading");
    				root.reload();
    				root.collapse(true, false);
    				Timer timer = new Timer() {
    					@Override
    					public void run() {
    						treePanel.getEl().unmask();
    						root.expand(true, true);
    					}
    				};
    				timer.schedule(1000);
    			}
    		}, "Refresh"));
     
    		TreeEditor treeEditor = new TreeEditor(treePanel);
     
    		panel = new Panel();
    		panel.setBorder(false);
    		panel.add(treePanel);
     
    		RootPanel.get().add(panel);
    Codes dans mon service pour recupérer un String xml
    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
    65
    66
    67
    68
    69
    70
    71
     
    		List<Object[]> list = new ArrayList<Object[]>();
    		list.add(new Object[] { "Australia" });
     
    		list.add(new Object[] {  "Brazil" });
    		list.add(new Object[] {  "Canada" });
    		list.add(new Object[] {  "China" });
    		list.add(new Object[] { "Germany" });
    		list.add(new Object[] { "France" });
    		list.add(new Object[] { "India" });
    		list.add(new Object[] { "Seychelles" });
    		list.add(new Object[] { "United States" });
    		list.add(new Object[] { "Japan" });
    		list.add(new Object[] { "Italy" });
    		list.add(new Object[] { "Ghana" });
    		list.add(new Object[] { "Iceland" });
    		list.add(new Object[] { "Finland" });
    		list.add(new Object[] { "Switzerland" });
     
     
    		DocumentBuilderFactory factory
            = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = null;
    		try {
    			builder = factory.newDocumentBuilder();
    		} catch (ParserConfigurationException e4) {
    			e4.printStackTrace();
    		}
          DOMImplementation impl = builder.getDOMImplementation();
     
     
          Document doc = impl.createDocument(null,null,null);
          if(list != null && list.size() != 0){
          	Element e1 = doc.createElement("countries");
          	doc.appendChild(e1);
    			for (Object[] objects : list) {
    				Element e2 = doc.createElement("country");
    		        e1.appendChild(e2);
    				for (Object object : objects) {
    				        e2.setAttribute("title",object.toString());
    				}
    			}
    		}
          // transform the Document into a String
          DOMSource domSource = new DOMSource(doc);
          TransformerFactory tf = TransformerFactory.newInstance();
          Transformer transformer = null;
    		try {
    			transformer = tf.newTransformer();
    		} catch (TransformerConfigurationException e3) {
    			// TODO Auto-generated catch block
    			e3.printStackTrace();
    		}
          //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
          transformer.setOutputProperty(OutputKeys.METHOD, "xml");
          transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
          transformer.setOutputProperty
              ("{http://xml.apache.org/xslt}indent-amount", "4");
          transformer.setOutputProperty(OutputKeys.INDENT, "yes");
          java.io.StringWriter sw = new java.io.StringWriter();
          StreamResult sr = new StreamResult(sw);
          try {
    			transformer.transform(domSource, sr);
    		} catch (TransformerException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
          String xml = sw.toString();
     
     
    		return xml;
    Dans l'implementation du service je créé un string en format xml. Je tiens a charger un tree a partir ce fichier xml. dans mes codes coté client je convertis le string xml en document.


    Mon probleme est lorsque je fait un debug le fonction getXmlData me retourne un document Null. Donc je n'arrive pas charger le tree. C'est a la fain de mon debug que le service est chargé. Je n'arrive pas à comprendre cela.

    Quelqu'un pourra m'aider svp.

    Neerou

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut C'est un appel Asynchrone
    C'est normal, puisque ce sont des appels Asynchrone(AsyncCallback).
    tu dois construire/remplir ton TreePanel Apres la reponse rpc.

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Bonjour,

    Ce que dit moonair est tout à fait vrai, tu doit donc, dans ton onSuccess, appeler le remplissage de l'arbre.

    Dans ton constructeur ou autre méthode, tu construis la structure de ton écran. Ensuite tu appelles ta méthode asynchrone à l'intérieur de laquelle tu fais appel au remplissage de ton arbre :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    service.getCountriesList(new AsyncCallback<String>() {
    	@Override
    	public void onSuccess(String result) {
    		MessageBox.alert(result);
    		Document xmlDoc = XMLParser.parse(result);
     		loader.setDataUrl(xmlDoc.toString());
    	}
     
    	@Override
    	public void onFailure(Throwable caught) {
    		MessageBox.alert(caught.getMessage());
    	}
    });
    Après, n'étant pas experte en arbre. Je ne sais pas trop comment fonctionnent ceux-ci.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Par défaut
    Merci bien pour les reponses. J'ai pu m'en sortir avec. Je ne vois toujours pas comment je peux charger le tree via le xml obtenu. Je parse le string xml et crée les treenodes pour le moment. Quelqu'un aurait une idee là-dessus svp

    Neerou

  5. #5
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 9
    Par défaut Aide pour un problème similaire
    J'ai le même problème, mais c'est avec le BeanModel
    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
     
    proxy = new RpcProxy<List<PlatformForm>>() {
     
    			protected void load(Object loadConfig,
    					AsyncCallback<List<PlatformForm>> callback) {
    				// TODO Auto-generated method stub
     
    				greetingService.getListPlatform(new AsyncCallback<List<PlatformForm>>() {
     
    					public void onFailure(Throwable caught) {
    						// Show the RPC error message to the user
     
    						caught.printStackTrace();
     
    					}
     
    					public void onSuccess(List<PlatformForm> result) {
     
     
    							for (int i = 0; i < result.size(); i++) {
     
    								loader.load();
     
     
    							}
     
     
    						}
     
    			});
    		}
    		};
     
    		BeanModelReader reader = new BeanModelReader();
     
    		// tree loader
    		loader = new BaseTreeLoader<BeanModel>(proxy, reader){  
    		      @Override  
    		      public boolean hasChildren(BeanModel parent) {  
    		        return parent instanceof BeanModel;  
    		      }  
    		    };  
    		// trees store
    		store = new TreeStore<BeanModel>(loader);
    		store.setKeyProvider(new ModelKeyProvider<BeanModel>() {
    			public String getKey(BeanModel model) {
    				return model.<String> get("id");
    			}
    		});
     
    		tree = new TreePanel<BeanModel>(store);
    		tree.setStateful(true);
    		tree.setDisplayProperty("label");
    		// statefull components need a defined id
    		tree.setId("statefullasynctreepanel");
    mais la réponse est que " store est vide "

    donc je n'arrive pas à construire mon TreePanel

    Quelqu'un peut m'aider à resoudre ce problème SVP ??

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/11/2010, 18h53
  2. WMI Problème RPC lors d'un appel de fonction
    Par arsenik dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2006, 13h10
  3. Réponses: 7
    Dernier message: 27/08/2006, 17h59
  4. [RPC] Appels distants : remplacer des objets COM
    Par pataguillon dans le forum C++
    Réponses: 26
    Dernier message: 30/03/2006, 09h17
  5. Echec d'un appel distant avec RPC
    Par hasan dans le forum MFC
    Réponses: 3
    Dernier message: 18/05/2005, 06h42

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