标签: jsni

GWT JSNI是否支持回调?

我正在构建一个使用Web SQL本地存储的GWT应用程序( http://dev.w3.org/html5/webdatabase/).问题是Web SQL API使用回调函数作为参数.

是否可以将"Java"回调传递给JSNI?

gwt jsni

19
推荐指数
1
解决办法
5697
查看次数

从JSNI方法返回除int之外的东西

我正在托管模式下运行GWT应用程序.偶尔我会HostedModeException抱怨从JSNI返回的JS值的类型.有时它是在反序列化期间:

 com.google.gwt.dev.shell.HostedModeException: Something other than an int was returned from JSNI method '@com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader::readInt()': JS value of type boolean, expected int
    at com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:247)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.readInt(ClientSerializationStreamReader.java)
Run Code Online (Sandbox Code Playgroud)

有时在:

 com.google.gwt.dev.shell.HostedModeException: Something other than an int was returned from JSNI method '@com.google.gwt.user.client.impl.DOMImpl::eventGetTypeInt(Ljava/lang/String;)': JS value of type null, expected int
    at com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:247)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
    at com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt(DOMImpl.java)
    at com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt(DOMImpl.java:62)
    at com.google.gwt.user.client.DOM.eventGetType(DOM.java:602)
    at com.google.gwt.user.client.Event$.getTypeInt$(Event.java:695)
    at com.extjs.gxt.ui.client.util.BaseEventPreview.onPreviewNativeEvent(BaseEventPreview.java:139)
Run Code Online (Sandbox Code Playgroud)

再一次

com.google.gwt.dev.shell.HostedModeException: Something other than a float was returned from …
Run Code Online (Sandbox Code Playgroud)

gwt jsni gwt-hosted-mode

19
推荐指数
1
解决办法
6800
查看次数

从JavaScript调用GWT Java函数

我是GWT和JavaScript的新手.我试图遵循这种类型的类似问题,但我一直都在失败.

我有一个GWT应用程序,我需要从Javascript调用Java函数(尤其是在href标签的onclick上.)以下是我所做的.

public class JSNITest {

 public static void handleAnchorClick(int a , int b) {
   Window.alert("Current row and Column is " + a + "  " + b);
 }

 public static native void exportMyFunction()/*-{
    $wnd.handleAnchorClick = function(param1,param2){
        @company.package.class.JSNITest::handleAnchorClick(*)(param1,param2);
 }-*/;

}
Run Code Online (Sandbox Code Playgroud)

在HTML中,

<a href="javascript:handleAnchorClick(a1,a2);">link</a> 
Run Code Online (Sandbox Code Playgroud)

(a1 , a2)是我的代码中的两个整数变量.我还在入口点函数中调用了EnclosingClass.exportMyFunction().我一直遇到各种异常(No Such class exception).有人可以纠正我吗?

问候

gwt jsni gwtquery gwt-exporter

16
推荐指数
1
解决办法
1万
查看次数

从html脚本标记调用GWT Java函数

我有一个GWT项目,我想在GWT项目的主html文件中添加一个脚本标记,该文件调用位于我的客户端代码中的Java函数.

根据文档,我应该添加类似下面的html标记:

<script type='text/javascript'> 
this.@com.myCompany.myProject.client.myClass::myFunction();
</script>
Run Code Online (Sandbox Code Playgroud)

其中com.myCompany.myProject.client.myClass是类路径,myFunction是我想调用的java函数.

当我尝试使用myFunction的以下实现时,没有任何反应:

public void myFunction() {
    HTMLPanel panel = new HTMLPanel("I have been called");
    RootPanel.get().add(panel);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,myFunction没有被调用.

但是当我从JSNI方法进行相同的调用时,它就可以工作了.

是否可能无法通过html脚本进行调用,或者我做错了什么?

谢谢!

javascript java gwt jsni

14
推荐指数
1
解决办法
1万
查看次数

GWT 2.x $入场功能

找不到有关此功能的任何开发人员信息.我只知道建议用这个$entry函数将JSNI JavaScript调用包装到Java方法中.我发现它捕获了异常,因此Java代码可以处理它们.这就是它的全部吗?

javascript java gwt jsni

11
推荐指数
1
解决办法
1700
查看次数

在GWT jsni中使用jquery

我无法使用

$("#"+profileId).offset().top
Run Code Online (Sandbox Code Playgroud)

从我的gwt jsni函数里面.我试过这个

$wnd.$("#"+profileId).offset().top
Run Code Online (Sandbox Code Playgroud)

但这也行不通.我觉得我在这里缺少语法.可以有人帮忙吗

jquery gwt jsni gwtquery

11
推荐指数
1
解决办法
1万
查看次数

GWT中的同步RPC调用

(仅此标题应该让人们从木制品中走出来用棍棒打击我,但是听我说话).

我有一个用例,我需要从异步调用返回一个值.(我正在使用GWT-Platform,但概念是相同的.)我声明了最终的JavaScriptObject数组,然后在AsyncCallback中分配了值.但是,我需要返回值,并且该方法在AsyncCallback完成之前返回.因此,我需要以某种方式阻止,直到AsyncCallback完成.我需要在另一个方法中返回值,或者我只是在onSuccess()中执行我需要的操作.

我已经尝试过循环,定时器和其他一些没有运气的方法.有人可以帮忙吗?

@Override
public JavaScriptObject doGetWhereAmIMarker(final double lng, final double lat) {

    final JavaScriptObject[] markerArray = new JavaScriptObject[1];  // ugly hack, I know
    dispatch.execute(new GetLocationDescriptionsAction(lng, lat), new AsyncCallback<GetLocationDescriptionsResult>() {
        @Override
        public void onFailure(Throwable caught) {
            caught.printStackTrace();
        }

        @Override
        public void onSuccess(GetLocationDescriptionsResult result) {
            Map<String, Location> resultMap = result.getResult();
            StringBuffer message = new StringBuffer();
            for (String key : resultMap.keySet()) {
                message.append(key).append(": ").append(resultMap.get(key)).append("\n");
            }

            Map tempMap = new HashMap();
            tempMap.put("TITLE","Location Information");
            tempMap.put("LAT", lat);
            tempMap.put("LNG", lng);
            tempMap.put("CONTENTS", message.toString());

            JavaScriptObject marker = GoogleMapUtil.createMarker(tempMap); …
Run Code Online (Sandbox Code Playgroud)

java gwt jsni

9
推荐指数
1
解决办法
9886
查看次数

如何从Javascript调用GWT java函数?

是否可以从Javascript调用Java(GWT)方法?从文档中还不清楚.此处的所有示例http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html演示了如何从JSNI(非JS)函数调用java函数.

更新1

这是一个Java代码:

public class Test_GoogleWeb_JSNI_02 implements EntryPoint {
/**
 * This is the entry point method.
 */
public void onModuleLoad() {
}

public static void Callee() {
    Window.alert("Callee");
}
}
Run Code Online (Sandbox Code Playgroud)

这是html中的调用者按钮示例:

<input type='button' value='Call' onclick='Test02()'>
Run Code Online (Sandbox Code Playgroud)

这里有一些我尝试过但没有用过的功能:

<script type="text/javascript">

    function Test01() {
        @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }

    function Test02() {
        com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }


</script>
Run Code Online (Sandbox Code Playgroud)

更新2

以下工作.

Java准备:

public void onModuleLoad() {
    Prepare();
}

public static native void Prepare() /*-{
    $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee();
}-*/;

public static void Callee() {
    Window.alert("Callee");
}
Run Code Online (Sandbox Code Playgroud)

呼叫者:

function …
Run Code Online (Sandbox Code Playgroud)

javascript java gwt jsni

9
推荐指数
1
解决办法
9563
查看次数

如何使用JSNI从GWT Java运行JavaScript函数?

从手册中无法理解:如何从Java运行JS函数?

例如,我的html页面中有一个函数:

<script type="text/javascript" language="javascript">
    function foo() {
        alert('Foo!');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

以下模块显示了两个按钮,其中只有第二个按钮有效:

public class Test_GoogleWeb_JSNI_01 implements EntryPoint {

public void onModuleLoad() {

    Button fooButton = new Button("Foo!");
    fooButton.addClickHandler(new ClickHandler(){
        public void onClick(ClickEvent event) {
            fooRunner();
        };
    });


    HTML fooButtonNative = new HTML();
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>");

    RootPanel rootPanel = RootPanel.get();
    rootPanel.add(fooButton);
    rootPanel.add(fooButtonNative);

}

public static native void fooRunner() /*-{
  foo();
}-*/;
}
Run Code Online (Sandbox Code Playgroud)

在手册中说,在嵌套框架中实现本机函数,这解释了这种情况.但是如何运行JS函数呢?

更新1 以下工作.

Java的:

public static native void fooRunner() /*-{
  $doc.fooRunner();
}-*/;
Run Code Online (Sandbox Code Playgroud)

JS:

<script type="text/javascript" language="javascript">
    document.fooRunner …
Run Code Online (Sandbox Code Playgroud)

java gwt jsni

8
推荐指数
1
解决办法
1万
查看次数

滚动到gwt应用程序中页面的顶部

我有一个gwt应用程序,我想使用此方法滚动到页面顶部:

public static native void scrollTop() /*-{
  $wnd.scroll(0, 0);
}-*/;
Run Code Online (Sandbox Code Playgroud)

该方法在TreeNodeListenerAdapter的onClick方法中调用:

new TreeNodeListenerAdapter() {
  @Override
  public void onClick(Node node, EventObject e) {
    scrollTop();
  }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,我不知道为什么.当我在我的方法中放入警报时:

$wnd.alert("Treenode clicked");
Run Code Online (Sandbox Code Playgroud)

我看到了警报,但页面没有滚动.我在这里错过了什么?

javascript java gwt jsni

7
推荐指数
1
解决办法
6352
查看次数

标签 统计

gwt ×10

jsni ×10

java ×6

javascript ×4

gwtquery ×2

gwt-exporter ×1

gwt-hosted-mode ×1

jquery ×1