我的单元格表中的列没有填充任何内容时遇到问题。以下是我的代码:
public class CellTableExample implements EntryPoint {
private static class Contact
{
private String address;
private String name;
private String phone="";
public Contact(String name, String address, String phone) {
super();
this.address = address;
this.name = name;
this.phone=getPhoneNumber(name);
}
}
public String getPhoneNumber(String name)
{
String pNum="";
SQLRunnerAsync service = (SQLRunnerAsync) GWT.create(SQLRunner.class);
AsyncCallback<String> callback = new AsyncCallback<String>()
{
@Override
public void onFailure(Throwable caught)
{
}
@Override
public void onSuccess(ArrayList<String[]> result)
{
pNum=reuslt;
}
};
service.findPhoneNum(name,callback);
return pNum;
}
// The list of data to display.
private static List<Contact> CONTACTS = Arrays.asList(
new Contact("John", "123 Fourth Road asdf asdf asdfasdf"),
new Contact("Mary", "222 Lancer Lane")
);
@Override
public void onModuleLoad() {
CellTable<Contact> table = new CellTable<Contact>();
SQLRunnerAsync service = (SQLRunnerAsync) GWT.create(SQLRunner.class);
AsyncCallback<ArrayList<String[]>> callback = new AsyncCallback<ArrayList<String[]>>()
{
@Override
public void onFailure(Throwable caught)
{
}
@Override
public void onSuccess(ArrayList<String[]> result)
{
compFlexTable.setPageSize(result.size());
Contact[] contactArr = new Contact[result.size()];
for(int i=0;i<result.size();i++)
{
String [] temp = result.get(i);
String name=temp[0];//name
String address=temp[1];//address
contactArr[i]=new Component1(name,address);
}
COMPONENT=Arrays.asList(compArray);
//address column
TextColumn<Contact> addressColumn = new TextColumn<Contact>(){
@Override
public String getValue(Contact contact) {
return contact.address;
}
};
//name column
TextColumn<Contact> nameColumn = new TextColumn<Contact>(){
@Override
public String getValue(Contact contact) {
return contact.name;
}
};
//name column
TextColumn<Contact> phoneColumn = new TextColumn<Contact>(){
@Override
public String getValue(Contact contact) {
return contact.phone;
}
};
service.getContactInfo(callback);
// Add the columns.
table.addColumn(nameColumn, "Name");
table.addColumn(addressColumn, "Address");
table.setRowCount(CONTACTS.size(), true);
table.setRowData(0, CONTACTS);
RootPanel.get().add(table);
}
}
因此,当我创建联系人对象时,会调用另一个异步方法来获取联系人的电话号码。该表显示正常,但电话号码列为空。我该如何解决这个问题?任何想法/建议将不胜感激..非常感谢提前。
答案 0 :(得分:1)
您误解了程序的执行顺序。在getPhoneNumber中,将pNum设置为“”,启动异步请求,然后返回pNum。 pNum在这个过程结束时仍然是“”。稍后,当您的异步请求返回时,pNum设置为result
,但此时为时已晚 - 您的单元格已经被渲染。
基本上,一旦调用了渲染,就不能指望任何异步调用能够及时完成渲染表。您需要的所有数据必须在渲染之前立即可用,否则它将不会显示。在要求CellTable呈现自己之前,您可以将DataProvider子类化以执行这些额外检索。
答案 1 :(得分:0)
使用异步数据提供程序@Riley说
更多参考使用以下链接..
http://www.mytechtip.com/2010/11/gwt-celltable-example-using_8168.html