Officially, you can refer to the following.
Quoted from http://code.google.com/support/bin/answer.py?hl=en&answer=75695
How can I call one of my GWT Java methods from my application host
page?Share Comment Print
In order to accomplish this, you'll first need to create a JSNI method
that creates a JavaScript method that in turn makes the call to your
Java method. In your GWT application's onModuleLoad(), you would call
that JSNI method so that the JavaScript method is defined. From your
application host page you would then call the created JavaScript
method.
Confused yet? It's actually quite simple.
The code snippet below shows an example of this (courtesy of Robert
Hanson):
private native void initPlaylistJS (PlaylistTable pl) /*-{
$wnd.addClipToPlaylist = function (clipId, clipTitle) {
[email protected]::addClip(Ljava/lang/
String;Ljava/lang/String;)(clipId, clipTitle);
};
}-*/;
In this example, you would need to make a call to initPlaylistJS(pl)
in your GWT module's onModuleLoad(). Once your GWT application loads,
the JavaScript method is defined and is callable from outside of the
GWT application.
On Oct 6, 4:51 pm, Boris Lenzinger <[email protected]> wrote:
> Thank you for your suggestions.
>
> At last I found what was wrong (well I found a way to make it work :-) )
>
> First, the call to the method in the onclick was not good. It was defining
> an inline function instead of calling directly the variable that was
> exported by the MyUtilityClass.
>
> button.onclick = function() { $wnd.sayHello; };
>
> needed to be fixed :
>
> button.onclick = sayHello;
>
> Second the documentation that I have read was probably slightly out of date.
> Reading
> thishttp://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI...
> can see latest in the url ;-) ) showed a small difference in the
> declaration of the new variable sayHello :
>
> $wnd.computeLoanInterest =
> $entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));
> instead of
> $wnd.computeLoanInterest =
> @mypackage.MyUtilityClass::computeLoanInterest(IFI);
>
> I have made those 2 changes and now it is working. I post the code in
> case someone has the same problem.
>
> Boris
>
> ==============================================
> Class test.app.GwtAndJavascript
> ==============================================
>
> package test.app.client;
>
> > import com.google.gwt.core.client.EntryPoint;
> > import com.google.gwt.dom.client.DivElement;
> > import com.google.gwt.dom.client.Document;
> > import com.google.gwt.event.dom.client.ClickEvent;
> > import com.google.gwt.event.dom.client.ClickHandler;
> > import com.google.gwt.user.client.ui.Button;
> > import com.google.gwt.user.client.ui.RootPanel;
> > import com.google.gwt.user.client.ui.VerticalPanel;
> > import com.google.gwt.user.client.ui.Widget;
>
> > /**
> > * Entry point classes define <code>onModuleLoad()</code>.
> > */
> > public class GwtAndJavascript implements EntryPoint {
>
> > JsButton boutonJs;
>
> > public void onModuleLoad() {
> > final Button gwtButton = new Button("Calling JS from Java !");
>
> > final VerticalPanel panel = new VerticalPanel();
> > panel.add(gwtButton);
>
> > RootPanel.get("sendButtonContainer").add(panel);
> > MyUtilityClass.exportStaticMethod();
>
> > final ClickHandler handler = new ClickHandler() {
>
> > public void onClick(ClickEvent event) {
> > boutonJs.callSayHello("User");
> > }
> > };
> > gwtButton.addClickHandler(handler);
>
> > // Now I want to add javascript button that lives in a js script...
> > boutonJs = new JsButton();
> > panel.add(boutonJs);
>
> > }
>
> > private class JsButton extends Widget {
>
> > public JsButton() {
> > DivElement element = Document.get().createDivElement();
> > makeMyGraphicalObject(element);
> > setElement(element);
> > }
>
> > private native void makeMyGraphicalObject(DivElement element) /*-{
> > $wnd.createButton(element);
> > }-*/;
>
> > public native void callSayHello(String name) /*-{
> > $wnd.javascriptSayHello(name);
> > }-*/;
>
> > }
>
> > }
>
> > =============================
>
> Class test.app.MyUtilityClass
> =============================
> package test.app.client;
>
> import com.google.gwt.user.client.Window;
>
> public class MyUtilityClass {
>
> public static void sayHello() {
> Window.alert("Hello from GWT !");
> }
>
> public static native void exportStaticMethod() /*-{
> $wnd.sayHello = $entry(@test.app.client.MyUtilityClass::sayHello());
> }-*/;
>
> }
>
> ============================
> Javascript button.js
> ============================
> function createButton(divElement) {
> var button= document.createElement('input');
> button.setAttribute('type','button');
> button.setAttribute('name','bouton');
> button.setAttribute('value','Calling Java from Javascript');
> divElement.appendChild(button);
> button.onclick = sayHello;
>
> return button;
>
> }
>
> function javascriptSayHello(name) {
> alert("Hello " + name + " from Javascript");
>
> }
>
> =========================
> HTML file
> =========================
> <!doctype html>
> <!-- The DOCTYPE declaration above will set the -->
> <!-- browser's rendering engine into -->
> <!-- "Standards Mode". Replacing this declaration -->
> <!-- with a "Quirks Mode" doctype may lead to some -->
> <!-- differences in layout. -->
>
> <html>
> <head>
> <meta http-equiv="content-type" content="text/html; charset=UTF-8">
>
> <!-- -->
> <!-- Consider inlining CSS to reduce the number of requested files -->
> <!-- -->
> <link type="text/css" rel="stylesheet" href="GwtAndJavascript.css">
>
> <!-- -->
> <!-- Any title is fine -->
> <!-- -->
> <title>Web Application Starter Project</title>
>
> <!-- -->
> <!-- This script loads your compiled module. -->
> <!-- If you add any GWT meta tags, they must -->
> <!-- be added before this line. -->
> <!-- -->
> <script type="text/javascript" language="javascript"
> src="gwtandjavascript/gwtandjavascript.nocache.js"></script>
> <script type="text/javascript" language="javascript"
> src="bouton.js"></script>
> </head>
>
> <!-- -->
> <!-- The body can have arbitrary html, or -->
> <!-- you can leave the body empty if you want -->
> <!-- to create a completely dynamic UI. -->
> <!-- -->
> <body>
>
> <!-- OPTIONAL: include this if you want history support -->
> <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1'
> style="position:absolute;width:0;height:0;border:0"></iframe>
>
> <!-- RECOMMENDED if your web app will not function without JavaScript
> enabled -->
> <noscript>
> <div style="width: 22em; position: absolute; left: 50%; margin-left:
> -11em; color: red; background-color: white; border: 1px solid red; padding:
> 4px; font-family: sans-serif">
> Your web browser must have JavaScript enabled
> in order for this application to display correctly.
> </div>
> </noscript>
>
> <h1>Web Application Starter Project</h1>
>
> <table align="center">
> <tr>
> <td id="sendButtonContainer"></td>
> </tr>
> <tr>
> <td colspan="2" style="color:red;" id="errorLabelContainer"></td>
> </tr>
> </table>
> </body>
> </html>
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.