GWT:如何从RootPanel获取对按钮的引用?

时间:2011-10-26 16:50:34

标签: gwt

我正在使用GWT 2.4。在我的onModuleLoad方法中,给定一个字符串id,如何从RootPanel对象获取对页面上现有按钮的引用?我正在尝试这个

public void onModuleLoad() {
    ...
    final Button submitButton = (Button) RootPanel.get("submit");

但是收到编译错误,“无法从RootPanel转换为Button”。

编辑:

我认为使用迭代器会治愈疼痛,但没有骰子。这是加载的默认HTML(注意id =“submit”的按钮)...

<div>

    <form name="f">

        File name: <input type="text" size="25" id="filename" name="filename"

            value="" /> <input type="button" id="submit" name="submit"

            value="Submit" /> <input type="hidden" name="curId" id="curId"

            value="" />

    </form>

</div>

<div id="content"></div>

但onModuleLoad中的此代码导致NullPointerException(因为无法找到submitButton id)...

public void onModuleLoad() {

    final Button submitButton = (Button) getWidgetById("submit");
    submitButton.addStyleName("submitButton");
    ...

private Widget getWidgetById(final String id) {
    Widget eltToFind = null;
    final Iterator<Widget> iter = RootPanel.get().iterator();
    while (iter.hasNext()) {
        final Widget widget = iter.next();
        final Element elt = widget.getElement();
        if (elt.getId() != null && elt.getId().equals(id)) {
            eltToFind = widget;
            break;
        } // if
    } // while
    return eltToFind;
}

谢谢, - 戴夫

4 个答案:

答案 0 :(得分:13)

您可以使用Document.get().getElementById("submit").<InputElement>cast()获取输入元素,但无法从中获取Button小部件。

如果您将代码更改为<button type="button" id="submit" name="submit" value="Submit">而不是<input>(从技术上讲,类型=按钮部分不需要,但某些浏览器会将其视为类型=提交,如果您不需要) ,然后你可以使用Button.wrap()

Button button = Button.wrap(Document.get().getElementById("submit"));

答案 1 :(得分:2)

某些GWT小部件具有静态方法wrap(),允许将DOM元素转换为小部件实例。

Button submit = Button.wrap(DOM.getElementById(“submit”));

答案 2 :(得分:1)

get()方法返回与浏览器元素关联的RootPanel,而不是具有该名称的窗口小部件。 RootPanel是ComplexPanel的子类,所以我认为最好的办法是使用ComplexPanel中的方法遍历小部件,从而找到你想要的方式。

答案 3 :(得分:0)

Wrap创建一个图层,并将删除该按钮上先前编写的所有功能。

我用下面的代码解决了这个问题。

Document.get().getElementById("buttonId").getStyle().setDisplay(false)