【发布时间】:2016-07-15 14:29:35
【问题描述】:
我知道我可能只是在做一些愚蠢的事情,但我找不到一个实际展示如何使用 GWT 从 javascript 调用 Java 方法的示例。
I've followed the documentation almost verbatim where is says:
package mypackage;
public class Account {
private int balance = 0;
public int add(int amt) {
balance += amt;
}
public native void exportAdd() /*-{
var that = this;
$wnd.add = $entry(function(amt) {
that.@mypackage.Account::add(I)(amt);
});
}-*/;
}
然后你可以在JS中调用它使用
$wnd.add(5);
但这会导致我出现“$wnd 未定义”的错误。
这是我的代码: 我导出函数调用
public native void exportPaymentProcessComplete()/*-{
var that = this;
console.log('exportingPaymentProcessComplete');
$wnd.paymentProcessComplete = $entry(function(result){
that.@com.ec.client.checkout.Presenter::paymentProcessComplete(Ljava/lang/String;)(result);
});
}-*/;
我有一个正在调用的简单函数(有一个断点,因为我还没有调用它)
public void paymentProcessComplete(String result){
if(result != null){
}
}
这是棘手的部分,可能是我出错的地方。 JSNI 调用是在加载时从 iframe 进行的。我认为这与尝试调用父窗口的 javascript 函数有关,但我不确定如何引用父窗口的 $wnd 对象。
我试过这个:
response.getWriter().print("<script type=\"text/javascript\">parent.$wnd.paymentProcessComplete(\"SUCCESS\");</script>");
当我收到“$wnd is undefined”错误时。
还有这个:
response.getWriter().print("<script type=\"text/javascript\">parent.paymentProcessComplete(\"SUCCESS\");</script>");
这给了我“无法获取未定义或空引用的属性 'paymentProcessComplete'”。这与“$wnd is undefined”基本相同。
有人对如何做到这一点有任何想法吗?
【问题讨论】:
标签: javascript java gwt jsni