2012-11-02 30 views
4

我工作的JavaFX 2.2,我使用的WebView在JavaFX的場景集成的HTML代碼,並能夠正確地加載HTML。我正在關注this鏈接,並試圖將一些對象從javascript傳遞給webview/controller,但是我在java端獲得了空值。的JavaFX 2.2的雙向通信的JavaScript和web視圖

我在JSObject保存一個接口對象像下面

webEngine.getLoadWorker().stateProperty().addListener(
     new ChangeListener<State>() { 
      @Override 
      public void changed(ObservableValue<? extends State> ov, 
       State oldState, State newState) { 
       if (newState == State.SUCCEEDED) { 
         JSObject win = (JSObject) webEngine.executeScript("window"); 
         win.setMember("app", new JavaApp()); 
        } 
       } 
      } 
    ); 

我創建了一個類

public class JavaApp { 

     public void exit() { 
      Platform.exit(); 
     } 
     public void print(Date date) { 
      System.out.println("Parm:"+date); 
     } 
     public Date getValue() { 
      return new Date(); 
     } 
    } 

我的HTML是

<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     function callJava(){ 
      app.print(new Date()); 
      var val = app.getValue(); 
      app.print(val); 
     } 
    </script> 
</head> 
<body> 
<p>Help</p>  
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>  
</body> 
</html> 

在上面的代碼中,我總是得到空在JavaApp.print()方法中打印的值。有趣的一點是,當我在打印方法中將參數從Date更改爲String並從JavaScript傳遞字符串時,我得到了正確的值。

如何在這種情況下傳輸對象,尤其是Date對象。任何幫助深表appritiated

回答

4

的Java不知道Date類的的JavaScript

2.3 Data Type Conversions

您可以通過一個的JavaScript對象的Java,(你必須包裝在一個JSObject),但你可以得到直接參數只有這樣的:

  • ,
  • 布爾,
  • 字符串
  • 陣列
  • ,你必須把之前的JavaScript的同一個對象。

我對你的解決方案:

public class JavaApp { 

    public void exit() { 
     Platform.exit(); 
    } 
    //public void print(Date date) { 
    // System.out.println("Parm:"+date); 
    // } 
    public void print(long date) { 
     System.out.println("Parm:"+new Date(date)); 
    } 
    public Date getValue() { 
     return new Date(); 
    } 
} 

<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     function callJava(){ 
      // app.print(new Date()); 
      app.print(new Date().getTime()); 
      var val = app.getValue(); 
      app.print(val); 
     } 
    </script> 
</head> 
<body> 
<p>Help</p>  
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>  
</body> 
</html> 
+0

這回答了這個問題對我來說。我不得不序列化和反序列化我的Java對象到/來自JSON,以使事情能夠正常工作。使用GSON既快速又簡單,現在可以使用。這應該被標記爲正確答案。 – Splaktar