Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DOM.getElementById in GWT doesn't seem to work

I've the following code snippet:

myPanel.getElement().setId("left-content");
//...
//...
Element e = DOM.getElementById("left-content");// this returns NULL!

Update

Here is a longer code snippet:

public class RootComposite extends Composite
{
    public RootComposite(int comboSelectedIndex)
    {

        VerticalPanel verticalPanel = new VerticalPanel();
        initWidget(verticalPanel);
        VerticalPanel containerPanel = new VerticalPanel();
        containerPanel.setSpacing(1);
        verticalPanel.add(containerPanel);
        verticalPanel.setSize("100%", "100%");

        RightPanelMainComposite rightPanelMainComposite =  new RightPanelMainComposite();

        VerticalPanel rightcolVerticalPanel = new VerticalPanel();
        rightcolVerticalPanel.setStyleName("rightcol");
        VerticalPanel searchVerticalPanel = new VerticalPanel();
        searchVerticalPanel.setStyleName("search");
        rightcolVerticalPanel.add(searchVerticalPanel);
        searchVerticalPanel.add(rightPanelMainComposite);

        ContentComposite contentComposite = new ContentComposite();

        HorizontalPanel leftContentPanel = new HorizontalPanel();
        containerPanel.add(leftContentPanel);
        leftContentPanel.getElement().setAttribute("id", "left-content");

        DOM.getElementById("left-content"); // returns NULL !!!
        // ....
    }

The above Composite is being added to the RootPanel.

like image 237
Muhammad Hewedy Avatar asked Dec 04 '22 23:12

Muhammad Hewedy


2 Answers

You can use DOM.getElementById only if the requested widget is actually attached to the DOM. Your code shows that you set the id in the constructor and request the correspondant element right after when the widget is not attached yet. Your widget is actually attached only when its onLoad method is called.

like image 178
emerix Avatar answered Jan 22 '23 22:01

emerix


I assume, that you didn't add myPanel to the DOM (e.g. RootPanel.get().add(myPanel)) before calling DOM.getElementById("left-content").

like image 23
Chris Lercher Avatar answered Jan 22 '23 22:01

Chris Lercher