Sorry for the javascript : there is a mistake : variable name is not
buttonnode but button at return step of the method...
Anyway the problem still stands ;-)

Boris

2010/10/5 Boris Lenzinger <boris.lenzin...@gmail.com>

> Hi,
>
> I'm currently trying to call a "java" method from a javascript that lives
> outside of the generated javascript from GWT.
>
> What I want to do is the following :
>   make the gwt component communicates with a javascript component (in both
> ways).
> I have to say that I don't know at all javascript......
>
> The problem I encounter is the following :
>   * call to javascript method (generated by GWT) from my handwritten
> javascript does not work : firebug says : $wnd does not exist.
> I thought this variable was always existing in javascript but this
> assumption is may be false.
>
> I think it is quite basic (probably a problem of understanding in
> javascript). I have read the following (this is where I found most of the
> code for doing the stuff) :
>
> http://www.gwtapps.com/doc/html/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.JavaFromJavaScript.html
> plus others (like
> http://www.mail-archive.com/google-web-toolkit@googlegroups.com/msg38714.html)
>  but I'm stuck there.
>
> Here the very basic code to test the feature :
>
> ============================
>        The GWT Component
> ============================
> 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.DialogBox;
> import com.google.gwt.user.client.ui.HTML;
> 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 jsButton;
>
>   public void onModuleLoad() {
>     final Button gwtButton = new Button("Add item to JS !");
>
>     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) {
>         jsButton.callSayHello("User");
>       }
>     };
>     gwtButton.addClickHandler(handler);
>
>     // Now I want to add javascript button that lives in a js script...
>     jsButton = new JsButton();
>     panel.add(jsButton);
>
>   }
>
>   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);
>     }-*/;
>
>   }
>
> }
>
> =======================
> The class that should help to trigger the java method from javascript
> =======================
> package test.app.client;
>
> import com.google.gwt.user.client.Window;
>
> public class MyUtilityClass {
>
>   public static void sayHello() {
>     Window.alert("Say Hello !");
>   }
>
>     public static native void exportStaticMethod() /*-{
>       $wnd.sayHello = @test.app.client.MyUtilityClass::sayHello();
>     }-*/;
>
> }
>
> ====================
> The HTML page
> ====================
>
> <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="button.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>
>
>     <table align="center">
>       <tr>
>         <td id="sendButtonContainer"></td>
>       </tr>
>       <tr>
>         <td colspan="2" style="color:red;" id="errorLabelContainer"></td>
>       </tr>
>     </table>
>   </body>
> </html>
>
>
> ====================
> The javascript code
> ====================
>
> function createButton(divElement) {
>   var button= document.createElement('input');
>   button.setAttribute('type','button');
>   button.setAttribute('name','button');
>   button.setAttribute('value','JS Button');
>   divElement.appendChild(button);
>   button.onclick = function() { $wnd.sayHello; };
>
>   return button;
> }
>
> // This is called from java
> function javascriptSayHello(name) {
>   alert("Hello " + name);
> }
>
> ============
>
>
> Any help would be highly appreciated :-)
>
> thanks in advance
>
> Boris
>

-- 
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.

Reply via email to