This is great ! It is working perfectly ! Thank you for pointing this out to me !!
2010/10/6 Yau <kvle...@gmail.com> > 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) { > p...@com.foo.bar.client.playlisttable::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 <boris.lenzin...@gmail.com> 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 google-web-tool...@googlegroups.com. > To unsubscribe from this group, send email to > google-web-toolkit+unsubscr...@googlegroups.com<google-web-toolkit%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.