我正在使用GWT 2.4.在我的onModuleLoad方法中,给定一个字符串id,如何从RootPanel对象获取对页面上现有按钮的引用?我正在尝试这个
public void onModuleLoad() {
...
final Button submitButton = (Button) RootPanel.get("submit");
Run Code Online (Sandbox Code Playgroud)
但得到编译错误,"无法从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>
Run Code Online (Sandbox Code Playgroud)
但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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢, - 戴夫
Tho*_*yer 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"));
Run Code Online (Sandbox Code Playgroud)