Is it possible to call Java (GWT) methods from Javascript? It is also unclear from documentation. All samples here .html demonstrate calling java functions from JSNI (not JS) functions.
UPDATE 1
Here is a Java code:
public class Test_GoogleWeb_JSNI_02 implements EntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
}
public static void Callee() {
Window.alert("Callee");
}
}
Here is caller button samples in html:
<input type='button' value='Call' onclick='Test02()'>
And here are some functions I tried and which were not worked:
<script type="text/javascript">
function Test01() {
@.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
function Test02() {
.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
</script>
UPDATE 2
The following worked.
Java preparation:
public void onModuleLoad() {
Prepare();
}
public static native void Prepare() /*-{
$doc.calleeRunner = @.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee();
}-*/;
public static void Callee() {
Window.alert("Callee");
}
Caller:
function Test03() {
document.calleeRunner();
}
Is there a better way?
Is it possible to call Java (GWT) methods from Javascript? It is also unclear from documentation. All samples here http://code.google./intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html demonstrate calling java functions from JSNI (not JS) functions.
UPDATE 1
Here is a Java code:
public class Test_GoogleWeb_JSNI_02 implements EntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
}
public static void Callee() {
Window.alert("Callee");
}
}
Here is caller button samples in html:
<input type='button' value='Call' onclick='Test02()'>
And here are some functions I tried and which were not worked:
<script type="text/javascript">
function Test01() {
@.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
function Test02() {
.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
}
</script>
UPDATE 2
The following worked.
Java preparation:
public void onModuleLoad() {
Prepare();
}
public static native void Prepare() /*-{
$doc.calleeRunner = @.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee();
}-*/;
public static void Callee() {
Window.alert("Callee");
}
Caller:
function Test03() {
document.calleeRunner();
}
Is there a better way?
Share Improve this question edited Dec 23, 2011 at 18:31 Dims asked Dec 23, 2011 at 18:03 DimsDims 51.1k130 gold badges358 silver badges651 bronze badges 1- can you call a javascrypt method that returns an object? and use that object? – chelo_c Commented Dec 5, 2015 at 5:30
1 Answer
Reset to default 13your example is not going to work, since you are trying to use JSNI in some external script. If you want to call something from external JS you need to use approach described in this question or use GWT exporter
UPDATE:
The safest way to expose the GWT stuff is to wrap invocation in some other function. For example:
public native void expose()/*-{
$wnd.exposedMethod = function(param){
@.my.MyClass::myFunction(*)(param);
}
}-*/;
Otherwise you might encounter some strange bugs in production mode=)