i) The problem here is that you are trying to reference an element that has
not yet been added to the dom.

Check where you are adding the element...most likely a you have a call to
RootPanel.get().add(elem).  Be sure that this happens before calling
getElementsById().

ii) I prefer to create my own Generic Widgets by extending ComplexPanel.
 This is helpful because you can pass in any tag name that you'd like:

public class ContainerTag extends ComplexPanel{
    public ContainerTag(String tagName) {
        setElement(DOM.createElement(tagName));
    }
}

Then you can use: ContainerTag div = new ContainerTag("div");

Daniel


On Thu, Jul 1, 2010 at 12:13 PM, giacomo <[email protected]> wrote:

> Hi everyone!
>
> SUMMARY
> =========
>
> I'm facing a problem with Document.get().getElementById(String) (in
> Java) and $doc.getElementById(String) (in JavaScript) returning nulls.
>
> My design goal is to define a <div> element in the Java code and add
> it to the document, so that I can then retrieve it in the JSNI method
> and use JavaScript libraries to draw stuff within it.
>
> DESCRIPTION
> ============
>
> To make problem description simpler, here is my GWT code:
>
> 1       protected void draw() {
> 2               String id = "divId";
> 3               HTML divElement = new HTML("<div id=\'" + id + "\'>Hello
> World</
> div>");
> 4               getChartPanel().add(divElement); //getChartPanel() returns
> a Panel
> 5               Window.alert("The element ID is " + id);
> 6               Element element = Document.get().getElementById(id);
> 7               Window.alert("The GWT element ID is " + element.getId());
> 8               drawJS(id);
> 9       }
> 10
> 11      public static native void drawJS(String divID) /*-{
> 12              $wnd.alert("The JS element ID is " + divID);
> 13              var chartPanel1 = $doc.getElementById(divID);
> 14              $wnd.alert("The chart panel is " + chartPanel1);
> 15              var chartPanel2 = document.getElementById(divID);
> 16              $wnd.alert("The chart panel is " + chartPanel2);
> 17              chartPanel.innerHTML("Hello, World!");
> 18      }-*/;
>
> When the draw() method is called I get the following:
>
> i)      Window on line 5 pops up with "The element ID is divId";
> ii)     Window on line 7 pops up with "The GWT element ID is null";
> iii)    Window on line 12 pops up with "The JS element ID is divId";
> iv)     Window on line 14 pops up with "The chart panel is null";
> v)      Window on line 16 pops up with "The chart panel is null"; and
> vi)     A JavaScriptException is raised in development mode at line 17:
>
> -----------------------------------------------------------
> 09:50:16.235 [ERROR] [sensor_network] Uncaught exception escaped
> com.google.gwt.core.client.JavaScriptException: (ReferenceError):
> chartPanel is not defined
>  fileName: http://127.0.0.1:8888
>  lineNumber: 7
>  stack: ("divId")@http://127.0.0.1:8888:7
> @:0
> -----------------------------------------------------------
>
> ANALYSIS
> ========
>
> I inspected the Web page with FireBug and the <div> element with id =
> "divId" DOES exist after it is added in the Java code. However,
> neither the Java nor the JavaScript methods are able to retrieve it.
>
> QUESTIONS
> ==========
>
> i)      What am I doing wrong and how do I fix it?
>
> ii)     Is there a better way to add a <div> element in Java and pass it
> to a JavaScript method, so that the latter can use it to add stuff
> (e.g., JavaScript-based charts) in it?
>
> Thank you.
>
> G.
>
> --
> 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]<google-web-toolkit%[email protected]>
> .
> 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 [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.

Reply via email to