繁体   English   中英

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

[英]GWT JSNI - Java To Javascript Back To Java Results in undefined params

在两天的大部分时间里,我已经全力以赴。 我已经通过在JSNI的文档阅读这里以及在JSNI几个不同的博客文章和传递变量像这样一个并没有什么表示,我做错什么。 本质上,我想做的是从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类中设置一个值,然后稍后在您的类中使用该值?

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

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

因此,与其使用像handleTargetPicked(arg1,arg2)这样的直接调用方法,不如我使用method.call()传递了诸如handleTargetPicked.call(instance,arg1,arg2)之类的上下文。 这种方法为我解决了这个问题。 希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM