当前位置: 首页 > 面试题库 >

从JavaScript到Java(GWT故事)

法烨烨
2023-03-14
问题内容

因此,我正在为嵌入式Web浏览器(Sketchup)设计GWT中的应用程序。我可以通过将window.location值更改为“ skp :: myFunciton @myParams”来控制Sketchup。Sketchup可以在浏览器中执行javascript。我想做的就是让Sketchup给我模型的内容。

public static native void getModel() /*-{
    $wnd.location = "skp:getModel@";
}-*/;

在进行第二次草图绘制后,将产生结果。但是我们如何将其恢复到gwt?问题是入口点实例启动了请求,而JSNI只能将静态方法映射到javascript。

我以为我有一个解决事件和元素的方法…

//Sketchup javascript
var gwtwidget = document.getElementById("myTextArea")
gwtwidget.value = "blahblah";
gwtwidget.onchange();

然后聆听GWT的变化。las,这行不通。Gwt自己的事件系统会覆盖,接收,阻止(或其他)事件。我应该采取什么方法?我一直在网上搜索信息,但是我当然无法绕开它。我猜答案是…

1从javascript调用入口点实例方法(以某种方式)
2从javascript触发将由gwt拾取的事件(以某种方式)
3设置某种异步回调接口机制(以某种方式)


问题答案:

界面应该非常简单。

例如,假设我们在GWT中有一些对象。假设我们在JS中有一些函数可以接受一些回调作为参数。因此,在gwt中,我们将具有以下内容:

    public static native void executeFunctionWithCallBack(MyCallback callback)/*-{
           var callBackWrapper =function(param) {
              callback.@com.package.MyObject::onSuccess(*)(param);
           } 
           $wnd.invokeFunctionWithCallback(callbackWrapper)  
     }-*/;

如果要调用实例方法,则不仅需要公开方法,还需要公开应在其上调用的实例。例如,您必须将实例作为参数传递给JSNI方法(或以其他方式从JSNI获取)。然后创建一个JS函数,该函数将在实例上调用方法。就这样。没有更多的魔术=)



 类似资料:
  • 问题内容: 是否可以从Javascript调用Java(GWT)方法?从文档中也不清楚。http://code.google.com/intl/zh- CN/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html上的 所有示例都演示了如何从JSNI(而非JS)函数调用Java函数。 更新1 这是一个Java代码: 这是html中的呼叫者按钮示例: 这

  • 问题内容: 从手册中无法理解:实际上如何从Java运行JS函数? 例如,我的html页面中有一个函数: 以下模块显示了两个按钮,其中只有第二个起作用: 手册中说,本机函数在嵌套框架内实现,这说明了这种情况。但是如何运行JS函数呢? 更新1 以下工作。 Java: JS: 有没有更好的办法? 问题答案: 您自己回答了问题。出于一个非常简单的原因,没有更好的方法:部署GWT应用程序有多种方法,在ifr

  • 问题内容: 我在Java GWT代码中有一个按钮。而且我在scripts文件夹中有一个javascript文件。我想在Button单击时访问该js文件的功能。 那么如何从Java GWT代码(Button的click事件)中调用该方法呢? 任何人都可以告诉我访问js文件功能的代码或方法。 提前致谢。 问题答案: 由于您的代码不应依赖于gwt链接器(及其加载代码的方式),因此需要在调用之前添加正确的

  • 我有这个例子: 输出:[B@5fdef03a 有没有办法在具有相同输出的javascript中做到这一点?

  • 问题内容: 是否有直接从Java代码直接调用GWT RPC服务端点的简便方法?我的意思是真正的Java代码,而不是编译成JavaScript的Java代码。 我问是因为我们想针对GWT RPC接口运行性能基准测试/压力测试。我想用Java编写测试工具,并在JVM中运行它(与在浏览器中运行的javascript相反)。 我认为必须有一种方法可以执行此操作,因为我认为GWT托管模式需要这种功能。但是,