javascript - GWT JSNI - Java 到 Javascript 返回 Java 导致未定义的参数

标签 javascript java gwt parameters jsni

这两天我已经绞尽脑汁想这个问题了。我已阅读 JSNI here 上的文档以及一些关于 JSNI 和传递变量(如 this one)的不同博客文章没有任何迹象表明我做错了什么。本质上我想做的是从我的 GWT 客户端类调用一个 javascript 方法,我在类加载时将其导出到 javascript。该方法从另一个 JS 方法获取参数并将它们存储在我传递的 Java 类的实例中。这似乎有效。但是,一旦我在 java 代码中引用这些方法,它们就变成了未定义的。我相信正在发生的事情是我的 Java 类实例在 JS 完成后不知何故丢失了。这里有一些代码可以帮助解释工作流程...

我有一个名为 ProfileWidgee 的 Java 类。该类有一个方法来设置位置、纬度和经度的局部变量。该方法名称是...

public void handleTargetPicked(String mloc, String mlat, String mlng)  {
    loc = mloc.equalsIgnoreCase("undefined") ? "" : mloc;
    lat = mlat.equalsIgnoreCase("undefined") ? "" : mlat;
    lng = mlng.equalsIgnoreCase("undefined") ? "" : mlng;
    Window.alert("setting on js side" + loc + lat + lng);
}

使用名为exportMyFunction 的 JSNI 方法将该方法作为函数导出到 JS...

public static native void exportMyFunction(ProfileWidgee instance)/*-{
   $wnd.handleTargetPicked = $entry(
      instance.@com.n.j.client.widgees.profile.ProfileWidgee::handleTargetPicked(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;));

}-*/;

一切似乎都很顺利。它导出,我可以在 JS 中调用 handleTargetPicked,如下所示...

handleTargetPicked(encodeURIComponent(place.formatted_address), 
    encodeURIComponent(place.geometry.location.lat()),
    encodeURIComponent(place.geometry.location.lng()));

所有这些似乎都有效,并且 Window.alert() 显示正确的值。这让我相信它有我的类的适当实例,并且它正在适本地设置变量。后来,当我回到 Java 类时,我尝试引用这些变量,但它们总是以“未定义”的形式返回。

Window.alert("reading on the java side" + pw.getLoc() + pw.getLat() + pw.getLng());

这会导致所有三个值均“未定义”。所以我的大问题是...是否可以从 JS 端在 Java 类中设置一个值,然后在稍后的类中使用该值?

最佳答案

我刚刚遇到了类似的情况,碰巧看到了你的帖子。 我在任何地方都看不到任何建议的解决方案,因此尝试自己调试。

我看到的是,“this”变量指向 Window 而不是对象实例。

所以不要像这样直接调用该方法handleTargetPicked(arg1, arg2),我使用 method.call() 传递上下文,例如handleTargetPicked.call(实例,arg1,arg2)。这种方法为我解决了这个问题。希望有帮助。

关于javascript - GWT JSNI - Java 到 Javascript 返回 Java 导致未定义的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642914/

相关文章:

javascript - 互联网浏览器中的enhance.js错误

java - 如何将字符转换为二进制?

javascript - GET 可以与其他库共存吗?

java - 调查应用程序设计

生产中的 GWT 源 map

java - 是否有使用 GWT 在 MVP 中使用观察者模式的推荐方法?

javascript - HTML + JavaScript : How to change image source on li hover?

javascript表单文本框post js和html

Javascript 将 xml 数据添加到 UL 列表

java - Java加解密: Unable to get same output