我正在使用gwt 2.6.0。我的页面上有一个列表框,使用以下代码
弹出 public void setOHIInfo(ArrayList<OHIInfoTo> result) {
ohiListBox.setEnabled(true); // ohiListBox is instance of com.google.gwt.user.client.ui.ListBox
for (OHIInfoTo ohiinfo : result) {
ohiListBox.addItem(ohiinfo.getOhiName(), ohiinfo.getOhiName());
GWT.log(ohiinfo.getOhiName()); // 5 data items are printed; no spaces
}
GWT.log("OHI Count - " + ohiListBox.getItemCount()); // Prints OHI Count - 5
}
页面加载时会打印2个GWT.log行,但列表框为空。 我在项目中搜索过,没有其他地方覆盖列表框。我还检查了chrome中的listbox元素,它实际上没有任何
还有其他方法可以找到问题吗?
答案 0 :(得分:0)
愚蠢的问题:您是否已将列表框添加到以下示例中的gwt入口点中加载的任何容器中?
public class ListBoxExample implements EntryPoint {
public void onModuleLoad() {
// Make a new list box, adding a few items to it.
ListBox lb = new ListBox();
lb.addItem("foo");
lb.addItem("bar");
lb.addItem("baz");
lb.addItem("toto");
lb.addItem("tintin");
// Make enough room for all five items (setting this value to 1 turns it
// into a drop-down list).
lb.setVisibleItemCount(5);
// Add it to the root panel.
RootPanel.get().add(lb);
}
}
编辑:我刚试过你的代码:
public class OHIInfoTo {
String name;
public OHIInfoTo(String name) {
this.name = name;
}
public String getOhiName() {
return name;
}
public void setOhiName(String name) {
this.name = name;
}
}
public class ListBoxEP implements EntryPoint {
@Override
public void onModuleLoad() {
List<OHIInfoTo> result = new ArrayList<OHIInfoTo>();
result.add(new OHIInfoTo("toto"));
result.add(new OHIInfoTo("hello"));
ListBox ohiListBox = new ListBox(false);
ohiListBox.setEnabled(true); // ohiListBox is instance of
// com.google.gwt.user.client.ui.ListBox
for (OHIInfoTo ohiinfo : result) {
ohiListBox.addItem(ohiinfo.getOhiName(), ohiinfo.getOhiName());
// GWT.log(ohiinfo.getOhiName()); // 5 data items are printed; no
// spaces
}
ohiListBox.setVisibleItemCount(ohiListBox.getItemCount());
RootPanel.get("editorAppContainer").add(ohiListBox);
}
}
它工作正常。你确定没有其他可能导致问题的东西吗?当你调用setVisibleItemCount时,你的listBox是否已填充?
答案 1 :(得分:0)
终于解决了这个!!! 对setOHIInfo的调用是异步的。因此,这个方法几乎与构造函数并行执行,并在列表框被删除之前完成。不知何故,它没有抛出空指针异常。这仍然是一个谜。
要修复 - 我确保首先渲染列表框,然后设置值。