如何在GWT中从java访问一些javaScript文件

时间:2012-04-07 01:18:53

标签: java gwt

我的GWT项目中有helloJava.HTML,在那个html文件中,我有这个javascript代码

                        <script type="text/javascript">
function testJavaScript(var input){
    var var1inJS = "Default value";

    alert("Value of Var1 = " + var1inJS);
    var1inJS = input;
    alert("Value of Var1 = " + var1inJS);

    var var2inJS = "Waht is the value of Var2";

    alert("Value of Var2 = " + var2inJS);

}

现在我想从我的onmoduleLoad类(即我的java类)中调用这个方法。

有可能吗?

hellojava.html文件

                            <!doctype html>
<!-- The DOCTYPE declaration above will set the     -->
<!-- browser's rendering engine into                -->
<!-- "Standards Mode". Replacing this declaration   -->
<!-- with a "Quirks Mode" doctype is not supported. -->

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--                                                               -->
    <!-- Consider inlining CSS to reduce the number of requested files -->
    <!--                                                               -->
    <link type="text/css" rel="stylesheet" href="HelloJSNI.css">

    <!--                                           -->
    <!-- Any title is fine                         -->
    <!--                                           -->
    <title>Web Application Starter Project</title>

    <!--                                           -->
    <!-- This script loads your compiled module.   -->
    <!-- If you add any GWT meta tags, they must   -->
    <!-- be added before this line.                -->
    <!--                                           -->
    <script type="text/javascript" language="javascript" src="hellojsni/hellojsni.nocache.js"></script>

    <script type="text/javascript">
    function testJavascript(var input){
        window.jsniAlert();
        var var1inJS = "Default value";

        alert("Value of Var1 = " + var1inJS);
        var1inJS = input;
        alert("Value of Var1 = " + var1inJS);

        var var2inJS = "Waht is the value of Var2";

        alert("Value of Var2 = " + var2inJS);

    }

    function callJava(){

    }
    </script>
  </head>

  <!--                                           -->
  <!-- The body can have arbitrary html, or      -->
  <!-- you can leave the body empty if you want  -->
  <!-- to create a completely dynamic UI.        -->
  <!--                                           -->
  <body>

    <!-- OPTIONAL: include this if you want history support -->
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>

    <!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
    <noscript>
      <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
        Your web browser must have JavaScript enabled
        in order for this application to display correctly.
      </div>
    </noscript>

    <h1>JSNI EXAMPLE</h1>

    <table align="center">
      <tr>
        <td colspan="2" style="font-weight:bold;"></td>        
      </tr>
      <tr>
        <td id="nameFieldContainer"></td>
        <td id="sendButtonContainer"></td>
      </tr>
      <tr>
        <td colspan="2" style="color:red;" id="errorLabelContainer"></td>
      </tr>
    </table>
  </body>
</html>

2 个答案:

答案 0 :(得分:2)

是。这大概就是你想要的:

public static native void callJavascript() /*-{
    $wnd.testJavaScript("hello");
}-*/;

然后在Java代码中调用此方法:callJavascript();

在JSNI上阅读Google的文档: https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI

答案 1 :(得分:0)

Travis的函数语法是正确的,问题是调用函数的名称,JS脚本不是正确

以下是更正

  1. 函数声明出错,不应使用var 争论。

  2. 删除第一行window.jsniAlert();

  3. 将第二个函数function callJava(){的声明更正为function callJava(){

  4. 这是代码(让我们调用JS testJSnative中的函数):

    <script type="text/javascript">
    function testJSnative(input){
        //window.jsniAlert();
        var var1inJS = "Default value";
    
        alert("Value of Var1 = " + var1inJS);
        var1inJS = input;
        alert("Value of Var1 = " + var1inJS);
    
        var var2inJS = "What is the value of Var2";
    
        alert("Value of Var2 = " + var2inJS);
    
    }
    
    function callJava(){
    
    }
    </script>
    

    实施EntryPoint的类的示例:

      public void onModuleLoad() {
    
        Button jsniButton = new Button("call JS");
        jsniButton.addClickHandler(new ClickHandler() {
    
          @Override
          public void onClick(ClickEvent event) {
    
            callJavascript();
          }
        });
        RootPanel.get().add(jsniButton);
      } 
    
      public native void callJavascript() /*-{
        $wnd.testJSnative("hello");
      }-*/;
    

    我希望这会有所帮助。