Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从gwt中的html标记调用gwt方法_Html_Gwt_Jsni - Fatal编程技术网

从gwt中的html标记调用gwt方法

从gwt中的html标记调用gwt方法,html,gwt,jsni,Html,Gwt,Jsni,我想从html标记调用gwt方法。是的 public void onModuleLoad(){ HTML html = new HTML("<button onclick=\"javascript:fire();\">test</button>"); RootPanel.get().add(html); } private static native void fire()/*-{ $wnd.aler

我想从html标记调用gwt方法。是的

 public void onModuleLoad(){
         HTML html = new HTML("<button onclick=\"javascript:fire();\">test</button>");
         RootPanel.get().add(html);
    }

    private static  native void  fire()/*-{
      $wnd.alert("clicked");
    }-*/;
模块加载()上的公共void{
HTML=新HTML(“测试”);
RootPanel.get().add(html);
}
私有静态本机void fire()/*-{
$wnd.警报(“点击”);
}-*/;
但是这个代码不起作用。有人能帮我吗?

试试:

Button tb = new Button("test");
tb.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    fire();
  }
});
RootPanel.get().add(tb);

private void fire() {
  com.google.gwt.user.client.Window.alert("clicked");
}
这样的办法应该行得通。(可能有一些打字错误。)

试试:

Button tb = new Button("test");
tb.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    fire();
  }
});
RootPanel.get().add(tb);

private void fire() {
  com.google.gwt.user.client.Window.alert("clicked");
}

这样的办法应该行得通。(可能有一些输入错误。)

GWT有JSNI和JSInterop。两者都可以向js公开javaapi。本摘录摘自gwt官方文件

从手写JavaScript调用Java方法 有时,您需要从外部访问GWT中定义的方法或构造函数 JavaScript代码。此代码可能是手写的,并包含在 另一个java脚本文件,或者它可能是第三方的一部分 图书馆。在这种情况下,GWT编译器将没有机会构建 JavaScript代码和生成的GWT之间的接口 直接使用JavaScript

使这种关系起作用的一种方法是分配方法 通过JSNI访问外部、全局可见的JavaScript名称,该名称可以 由手工编制的JavaScript代码引用。包我的包

public MyUtilityClass
{
    public static int computeLoanInterest(int amt, float interestRate,
                                          int term) { ... }
    public static native void exportStaticMethod() /*-{
       $wnd.computeLoanInterest =
          $entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));
    }-*/;
}
请注意,对导出方法的引用已包装在 调用$entry函数。这个隐式定义的函数确保 使用未捕获异常执行Java派生方法 已安装处理程序并泵送许多其他公用设施。这个 $entry函数是可重入的安全函数,应在需要的任何位置使用 可以从非GWT上下文调用GWT派生的JavaScript

在应用程序初始化时,调用 MyUtilityClass.exportStaticMethod()(例如,从GWT入口点)。 这将把函数分配给窗口对象中的一个变量 称为ComputeLoAnterest


这里有一个GWT有JSNI和JSInterop。两者都可以向js公开javaapi。本摘录摘自gwt官方文件

从手写JavaScript调用Java方法 有时,您需要从外部访问GWT中定义的方法或构造函数 JavaScript代码。此代码可能是手写的,并包含在 另一个java脚本文件,或者它可能是第三方的一部分 图书馆。在这种情况下,GWT编译器将没有机会构建 JavaScript代码和生成的GWT之间的接口 直接使用JavaScript

使这种关系起作用的一种方法是分配方法 通过JSNI访问外部、全局可见的JavaScript名称,该名称可以 由手工编制的JavaScript代码引用。包我的包

public MyUtilityClass
{
    public static int computeLoanInterest(int amt, float interestRate,
                                          int term) { ... }
    public static native void exportStaticMethod() /*-{
       $wnd.computeLoanInterest =
          $entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));
    }-*/;
}
请注意,对导出方法的引用已包装在 调用$entry函数。这个隐式定义的函数确保 使用未捕获异常执行Java派生方法 已安装处理程序并泵送许多其他公用设施。这个 $entry函数是可重入的安全函数,应在需要的任何位置使用 可以从非GWT上下文调用GWT派生的JavaScript

在应用程序初始化时,调用 MyUtilityClass.exportStaticMethod()(例如,从GWT入口点)。 这将把函数分配给窗口对象中的一个变量 称为ComputeLoAnterest


这里有一个

这行不通。我不确定,但我认为会删除fire方法,因为它不用于GWT端。您尝试过使用文本按钮吗?但fire是本机javascript方法。。你能给我一些工作的例子吗?我想警报不会弹出,这就是不工作的原因?这不起作用。我不确定,但我认为会删除fire方法,因为它不用于GWT端。您尝试过使用文本按钮吗?但fire是本机javascript方法。。你能给我一些工作的例子吗?我想警报不会弹出,这就是不工作的原因?哪一部分是不改变的关键?Java端是编译的(并封装在一个iframe中以防止名称空间问题),因此JS端看不到它(并且不会很好地编译,从而删除了GWT的整个要点)。“您提到的方式”就是为什么它不起作用,所以有些东西必须改变。您可以使用fire()的原始原生JSNI实现来代替本答案中的实现。哪一部分是不改变的关键?Java端是编译的(并封装在一个iframe中以防止名称空间问题),因此JS端看不到它(并且不会很好地编译,从而删除了GWT的整个要点)。“您提到的方式”是它不起作用的原因,因此有些东西必须改变