GWT Celltable更新按钮
我有下面的牢房表格。我在每一行添加了一个按钮。单击时,应更新新数据。 但是,当我单击update时,有关Contact对象的旧信息将传递给updateContact方法。如何获取用户输入的已编辑文本 以下是我的代码:GWT Celltable更新按钮,gwt,Gwt,我有下面的牢房表格。我在每一行添加了一个按钮。单击时,应更新新数据。 但是,当我单击update时,有关Contact对象的旧信息将传递给updateContact方法。如何获取用户输入的已编辑文本 以下是我的代码: public class CellTableExample implements EntryPoint { /** * A simple data type that represents a contact. */ private static class
public class CellTableExample implements EntryPoint {
/**
* A simple data type that represents a contact.
*/
private static class Contact {
private final String address;
private final Date birthday;
private final String name;
public Contact(String name, Date birthday, String address) {
this.name = name;
this.birthday = birthday;
this.address = address;
}
}
/**
* The list of data to display.
*/
@SuppressWarnings("deprecation")
private static final List<Contact> CONTACTS = Arrays.asList(
new Contact("John", new Date(80, 4, 12), "123 Abc Avenue"),
new Contact("Joe", new Date(85, 2, 22), "22 Lance Ln fasfasdfasfdasdfasfasdfasfasdfasfasfasdfasdfasdf"),
new Contact("Tom", new Date(85, 3, 22), "33 Lance Lnasdfasfdasdfffffffffffffffffff"),
new Contact("Jack", new Date(85, 4, 22), "44 Lance Lnsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"));
public void onModuleLoad() {
// Create a CellTable.
final CellTable<Contact> table = new CellTable<Contact>();
// Display 3 rows in one page
table.setPageSize(3);
// Add a text column to show the name.
TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.name;
}
};
table.addColumn(nameColumn, "Name");
// Add a date column to show the birthday.
DateCell dateCell = new DateCell();
Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) {
@Override
public Date getValue(Contact object) {
return object.birthday;
}
};
table.addColumn(dateColumn, "Birthday");
// Add a text column to show the address.
TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.address;
}
};
table.addColumn(addressColumn, "Address");
ButtonCell updateButton= new ButtonCell();
Column <Contact,String> update= new Column <Contact,String>(updateButton)
{
@Override
public String getValue(Contact c)
{
return "Update";
}
};
update.setFieldUpdater(new FieldUpdater<Contact,String>()
{
@Override
public void update(int index, Contact c,String value)
{
SQLRunnerAsync service = (SQLRunnerAsync) GWT.create(SQLRunner.class);
AsyncCallback callback = new AsyncCallback()
{
@Override
public void onFailure(Throwable caught)
{}
@Override
public void onSuccess(Object result)
{
}
};
service.updateContact(c.id, c.name, callback);
}
});
provider.addDataDisplay(table);
provider.updateRowCount(CONTACTS.size(), true);
SimplePager pager = new SimplePager();
pager.setDisplay(table);
VerticalPanel vp = new VerticalPanel();
vp.add(table);
vp.add(pager);
// Add it to the root panel.
RootPanel.get().add(vp);
}
}
公共类CellTableExample实现入口点{
/**
*表示联系人的简单数据类型。
*/
私有静态类联系人{
私有最终字符串地址;
私人最后日期生日;
私有最终字符串名;
公共联系人(字符串名称、日期、生日、字符串地址){
this.name=名称;
这个生日=生日;
this.address=地址;
}
}
/**
*要显示的数据列表。
*/
@抑制警告(“弃用”)
私有静态最终列表联系人=Arrays.asList(
新联系人(“约翰”,新日期(80,4,12),“Abc大道123号”),
新联系人(“Joe”,新日期(85,2,22),“22 Lance Ln FasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdf”),
新联系人(“Tom”,新日期(85,3,22),“33 Lance Lnasdfasfdasdfffffffffffff”),
新联系人(“Jack”,新日期(85,4,22),“44 Lance Lnsdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd”);
moduleload()上的公共void{
//创建一个单元格表。
最终单元表=新单元表();
//在一页中显示3行
表2.setPageSize(3);
//添加一个文本列以显示名称。
TextColumn name column=新建TextColumn(){
@凌驾
公共字符串getValue(联系人对象){
返回object.name;
}
};
表.addColumn(名称栏,“名称”);
//添加日期列以显示生日。
DateCell DateCell=新的DateCell();
列dateColumn=新列(dateCell){
@凌驾
公共日期getValue(联系人对象){
返回object.birth;
}
};
表.addColumn(dateColumn,“生日”);
//添加一个文本列以显示地址。
TextColumn addressColumn=新的TextColumn(){
@凌驾
公共字符串getValue(联系人对象){
返回object.address;
}
};
表.addColumn(addressColumn,“地址”);
ButtonCell updateButton=新ButtonCell();
列更新=新列(更新按钮)
{
@凌驾
公共字符串getValue(联系c)
{
返回“更新”;
}
};
update.setFieldUpdater(新的FieldUpdater()
{
@凌驾
公共无效更新(整数索引、联系人c、字符串值)
{
SQLRunnerAsync服务=(SQLRunnerAsync)GWT.create(SQLRunner.class);
AsyncCallback callback=新的AsyncCallback()
{
@凌驾
失败时的公共无效(可丢弃)
{}
@凌驾
成功时公共无效(对象结果)
{
}
};
service.updateContact(c.id、c.name、回调);
}
});
provider.addDataDisplay(表);
provider.updateRowCount(CONTACTS.size(),true);
SimplePager pager=新SimplePager();
寻呼机设置显示(表格);
VerticalPanel vp=新的VerticalPanel();
副总裁添加(表);
副总裁添加(寻呼机);
//将其添加到根面板。
RootPanel.get().add(vp);
}
}
找到解决方案后,我只需对每一列执行以下操作:
colName.setFieldUpdater(new FieldUpdater<Contact,String>()
{
public void update(int index, Contact c, String value)
{
comp.name=value;
}
});
colName.setFieldUpdater(新的FieldUpdater()
{
公共无效更新(整数索引、联系人c、字符串值)
{
组件名称=值;
}
});
当您更新值时,它会在变量中更新,但不会显示在表中。要显示您必须使用的更新数据,请执行以下操作:
cellTable.redraw();
redraw
函数使用更新的数据呈现表格