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

JavaFX Discussion :

webEngine executescript et tableau à envoyer


Sujet :

JavaFX

  1. #1
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut webEngine executescript et tableau à envoyer
    Bonjour,
    j'essaye en vain d'envoyer un tableau initialement en Double[][] via webEngine.executeScript (" nomdemafonctionjvscript (' + montableau +')") malheureusement ça ne marche pas . Pourtant mon code javascript de la page HTML est correct.
    Ma question est donc : Peut on envoyer un tableau de double ou de String ,si cela pose problème, via webEngine et executeScript à une fonction javascript se trouvant dans une page HTML ? Avez vous un petit exemple afin que je puisse calquer mon code dessus ?
    En vous remerciant d'avance

    Voici une partie du code java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     final URL urlHello = getClass().getResource("leaflet.html");
                webEngine.load(urlHello.toExternalForm());
     
                double[][] untrace = {{49.84653688680709,2.263697236776352},{49.84661125902917,2.2638890147209167},{49.84654034598273, 2.264016419649124},{49.84607767904088,2.2648251056671143}
    			,{49.845558794959594,2.264261841773987},{49.845354699028064, 2.263827323913574},{49.84592893284039,2.2626739740371704},{49.84653688680709,2.263697236776352}};
     
        webEngine.executeScript( " montrace(' " + untrace + " ') " ); // envoie via webengine
    Voici mon code html (programme leaflet issu de la bibliotheque du même nom (D'ailleurs un petit tuto dessus pour ceux qui ne connaissent pas l anglais ça serait super...):
    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
    <!DOCTYPE html>
     
    <html>
     
    <head>
     
    <title>Leaflet Web Map</title>
     
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
     
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
     
    <style>
    #map {
        width: 960px;
        height:500px;
    }
    </style>
     
    </head>
     
    <body>
     
        <div id="map"></div>
     
    <script>
    function montrace (toUnion){
        var map = L.map('map',{
        center: [49.846535, 2.26388],
        zoom: 15
        });
     
        L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
        }).addTo(map);
     
    	var marker = L.marker([49.846535,2.26388]);
    	L.polyline(toUnion,{color:'red',opacity:1}).addTo(map);
    	}
    	</script>
     
    </body>
     
    </html>

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je ne pense pas que tu t'y prenne par le bon bout. En faisant ainsi tout ce que tu vas envoyer au code JavaScript c'est un truc du genre "[[D@3581c5f3". Il te faut transformer untrace en une chaîne de texte équivalente à ce que le code JavaScript attend si tu appelais cette fonction directement depuis du JavaScript.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre réponse , effectivement j'obtiens quelque chose qui est peut être l'adresse d'une variable mais pas d une chaine de caractères je vais d abord essayer de raisonner en javascript avant de le remettre en java. Je vous tiens au courant . Encore Merci pour votre réponse.
    Je vais avoir encore besoin d'aide , en effet afin de vérifier la concordance de ce que je traduit pour mettre au bon format javascript j'ai voulu utiliser console.log ou window.alert() malheureusement avec le webview de javafx je n'arrive pas à afficher ... y a t il une autre astuce?
    En attente de vous lire

  4. #4
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut Merci pour vos remarques voici la solution
    J'ai donc traduit mon tableau java en String en séparant latitude et longitude par ";" et les coordonnées entre elles par "!" puis envoie à la fonction javascript avec recréation d'un tableau en prenant bien soins de "parser" dans la création du tableau sinon les valeurs sont prises pour du texte!!! (j ai passé une soirée à comprendre le problème!)

    Voici le code complet javaScript:
    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
    72
    73
    74
    <!DOCTYPE html>
     
    <html>
     
    <head>
     
    <title>Leaflet Web Map</title>
     
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
     
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
     
    <style>
    #map {
        width: 960px;
        height:500px;
    }
    </style>
     
    </head>
     
    <body>
     
        <div id="map"></div>
     
    <script>
    function montrace (param1){
        var map = L.map('map',{
        center: [49.846535, 2.26388],
        zoom: 15
        });
     
        L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
        }).addTo(map);
     
    	var marker = L.marker([49.846535,2.26388]);
    	L.polyline(param1,{color:'red',opacity:1}).addTo(map);
     
     
    	}
     
    function montranslator(user){
    	var compteur=0;
    	// pour dimensionner le futur tableau
    	for (i=0;i<user.length;i++){
    	if (user.charAt(i)==";") {compteur++;}
    	}
     
    	var traduit = new Array ();
    	var coordo = new Array();
    	coordo[0]="";coordo[1]="";
     
    	for (i=0;i<compteur;i++){
    	traduit[i] = new Array();
    	}
     
    	var a=0; var b=0;
    	for (i=0;i<user.length;i++){
    	if ((user.charAt(i)!=";")&&(user.charAt(i)!="!")) {coordo[b]=coordo[b]+ user.charAt(i);}
    	if (user.charAt(i)==";") {b++;}
    	if (user.charAt(i) =="!") {b=0;traduit[a][0]=parseFloat(coordo[0]);traduit[a][1]=parseFloat(coordo[1]);a++;coordo[0]="";coordo[1]="";}
    	}
     
    	montrace(traduit);
     
     
    }
     
    </script>
     
    </body>
     
    </html>
    et le code java un peu remanié ...
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    import java.io.File;
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.StackPane;
    import javafx.scene.web.WebEngine;
    import javafx.scene.web.WebView;
    import javafx.stage.Stage;
     
     
    public class main extends Application {
    	double[][] coordodouble = {{49.84653688680709,2.263697236776352},{49.84661125902917,2.2638890147209167},{49.84654034598273, 2.264016419649124},{49.84607767904088,2.2648251056671143}
    		    ,{49.845558794959594,2.264261841773987},{49.845354699028064, 2.263827323913574},{49.84592893284039,2.2626739740371704},{49.84653688680709,2.263697236776352}};
        String coordoString = "";
     
        @Override
        public void start(Stage primaryStage) {
        	String envoi = "[49.846535, 2.26388]";
            Button btn = new Button();
            btn.setText("tracer");
            btn.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                	for (int i=0;i<coordodouble.length;i++){//modifier la longueur de la chaine
             		   for (int j=0;j<2;j++){
             				coordoString=coordoString+String.valueOf(coordodouble[i][j]);
             				if (j<1){coordoString=coordoString+";";}
             			}
             			coordoString=coordoString+"!";
             		}
                	System.out.println(coordoString);
                    if (webengine != null) 
                    {
                        webengine.executeScript("montranslator(' " + coordoString + " ')");
                    }
                }
            });
     
            publishServices();
            StackPane root = new StackPane();
            HBox hh = new HBox();
            hh.getChildren().add(btn);
            hh.getChildren().add(webview);
     
     
            root.getChildren().add(hh);
     
            Scene scene = new Scene(root, 700, 450);
     
            primaryStage.setTitle("essai Leaflet");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
        private WebEngine webengine;
        private static WebView webview;
     
        private void publishServices() {
     
     
     
            try {
                webview = new WebView();
                webview.setVisible(true);
                webengine = webview.getEngine();
                webengine.setJavaScriptEnabled(true);
                File file = new File("C:\\Users\\....le trajet du fichier html...\\leaflet.html");
                System.out.println(file.exists() + " file exitence");
                webengine.load(file.toURI().toURL().toString());
            } catch (Exception ex) {
                System.err.print("error " + ex.getMessage());
                ex.printStackTrace();
            }
     
     
     
     
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }

    Merci encore Monsieur BOUYE:

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

Discussions similaires

  1. [MooTools] Tableau envoyé comme formulaire
    Par mjeandon dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 16/07/2014, 22h46
  2. [Socket][File] Envoyer un tableau de byte
    Par itsmii dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 30/01/2014, 09h10
  3. Envoyer des controles d'un formulaire dans un tableau
    Par CB56 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/11/2005, 10h43
  4. envoyer une variable(un tableau) via un lien href
    Par sebduduf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/11/2005, 16h52
  5. envoyer un tableau sur le serveur
    Par car dans le forum ASP
    Réponses: 5
    Dernier message: 16/08/2005, 16h23

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