从gwt中的html标记调用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
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的整个要点)。“您提到的方式”是它不起作用的原因,因此有些东西必须改变