0

I want to send the the data in my arraylist in java to an array in js. I searched on the web but I am still not sure how to do it. I saw someone tried to do it by writing the js and javacode together. How can I do it separately? In other words, java code and js code are separate. Please the picture below. I want to use javaFx or something that does not need to go through the internet like jsp. Thank you so much.

js and java code are seperate

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;


public class SendData extends Application{
    Button send;


    @Override
    public void start(Stage stage) throws Exception {
        WebView myWebView = new WebView();
        WebEngine engine = myWebView.getEngine();
        ArrayList<String> arr = new ArrayList<String>();
        arr.add("string1");
        arr.add("string2");
        arr.add("string3");
        arr.add("string4");
        arr.add("string5");


        send = new Button("send_to_js");
        send.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                /*?*/
            }

        });
        VBox vb = new VBox();
        vb.getChildren().addAll(myWebView, send);
        Scene scene = new Scene(vb, 500, 500);
        stage.setScene(scene);
        stage.show();   
    }

    public static void main(String[] args) {
        launch(args);

    }
}




$(document).ready(function() {
    /* how do I put the data into the array*/
    var receiver = [...];
});

2 Answers 2

1

I know little-to-nothing about JavaFX, but could you use WebEngine.executeScript?

// JSON-ify the ArrayList
String json = "[";
for (int i = 0; i < arr.size(); i++) {
    if (i != 0) json += ",";
    json += "'"+arr[i]+"'"; // NOTE: this doesn't escape special characters in arr[i]
}
json += "]";

// pass it to some JS function?
engine.executeScript("someFunction("+json+")");
Sign up to request clarification or add additional context in comments.

Comments

0

Yep, Java and Javascript are 2 different languages and thus it is not possible for you to directly pass the Java data structures around freely between both worlds.

The usual approach for solving such a problem is through serialization. That is, you would encapsulate your data from the java world into some data format e.g. XML or JSON and then from your javascript process, parse the serialized data into Javascript object.

For instance let say you have a simple Java class call Car with properties "color" and "Brand" and you have an array of Car.

Car[] cars = new Car[3];

You could represent this in JSON as;

{
    cars: [
        0: { brand: "Honda", color: "Red" },
        1: { brand: "BMW", color: "Black" },
        2: { brand: "Toyota", color: "Yellow" }
    ]
}

Then with this JSON document, you could then parse it into a javascript array with objects.

As for how you can pass a JSON document around from 1 process to another or even from macihne to machine, there are any ways you could do it.

You can either serialize the JSON data as a flat file and then read the content from another side or typically people just make use of the web service technology.

Let me know if this helps.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.