在gwt中通过id获取小部件

时间:2011-10-31 17:36:56

标签: dom gwt

我有一堆动态生成的TextBox。在创建步骤中,我为它们分配ID属性。 e.g。

id = ...
Button b = new Button();
b.setText("add textbox");
b.addClickHandler(new Clickhandler() {
Textbox tb = new TextBox();
tb.getElement().setId(Integer.toString(id));
tb.setText("some text");
}
id += 1;

我需要稍后通过他们的ID访问它们,但我不能这样做。 我试图使用DOM对象来获取一个小部件,但它产生了一个异常:

String id = "some id";
Element el = DOM.getElementById(id);
String value = el.getAttribute("value"); - this line produces an exception.

我也尝试过使用el.getInnerText,el.getNodeValue - 没有运气。我在chrome调试器中看到 - 文本框没有'value'属性。

3 个答案:

答案 0 :(得分:10)

您可以通过这种方式获取与元素关联的小部件:

public static IsWidget getWidget(com.google.gwt.dom.client.Element element) {
    EventListener listener = DOM
            .getEventListener((com.google.gwt.dom.client.Element) element);
    // No listener attached to the element, so no widget exist for this
    // element
    if (listener == null) {
        return null;
    }
    if (listener instanceof Widget) {
        // GWT uses the widget as event listener
        return (Widget) listener;
    }
    return null;
}

答案 1 :(得分:4)

由于您是在gwt java代码中构建文本框,为什么不将它们放入地图并稍后访问它们?

答案 2 :(得分:1)

要记住的一件事是HTML / DOM中属性和属性之间的区别。在您的示例中,“value”是一个属性。你可以试试Element#getPropertyString。过去,属性和属性可以互换使用,但在现代浏览器中已不再适用。