Ascendant
Ascendant

Reputation: 827

How to send form object to Java in JavaFX WebView

I was able to send a simple String from javascript/local html in Webview to Java.
How do I send the whole form object to Java ?

    public class JFXTest1 extends Application {
        WebView webview = new WebView();
        webview.getEngine().load(JFXTest1.class.getResource("local1.html").toExternalForm());

        JSObject jsobj = (JSObject) webview.getEngine().executeScript("window");
        Local1JSBridge bridge = new Local1JSBridge();

        bridge.setWindow(jsobj);

        jsobj.setMember("java", bridge);

And my bridge.

   public class Local1JSBridge {
      public void printFormData(String data1){

        System.out.println( data1);

    }

}

The javascript part that calls the method in the Java class.

<html>
<head></head>
<body>

    hi :) 

    <form id="form1" name="form1">
        <input type="text" id="text1">text value</input>
    </form>
    <button onclick="java.printFormData(document.getElementById('text1').value);">Submit</button>
    <br/>

    <button onclick="java.exit()">Exit</button>
</body>

Upvotes: 0

Views: 1710

Answers (1)

James_D
James_D

Reputation: 209553

I can't find a way to actually get the form data without executing Javascript back in the HTML document, but the following seems to basically work:

public void printFormData(Object form) {
    System.out.println(form.getClass() + " " + form);

    if (form instanceof Element) {
        NodeList inputs = ((Element)form).getElementsByTagName("input");
        for (int i = 0 ; i < inputs.getLength(); i++) {
            Node input = inputs.item(i);
            Element inputEl = (Element)input ;

            String id = inputEl.getAttribute("id");
            String value = (String) engine.executeScript(id+".value");

            System.out.printf("%s : %s %n", id, value);
        }
    }
}

and then in the HTML:

<html>
<head></head>
<body>

    hi :) 

    <form id="form1" name="form1">
        <input type="text" id="text1">text value</input>
    </form>
    <button onclick="java.printFormData(document.getElementById('form1'));">Submit</button>
    <br/>

    <button onclick="java.exit()">Exit</button>
</body>
</html>

Upvotes: 1

Related Questions