Gwt 大规模应用程序开发和MVP教程中的问题
我最近试着跟随这个故事。这个教程很棒,但我在一些事情上遇到了困难 如果尝试将联系人添加到列表中,则会创建该联系人。如果您尝试添加另一个联系人,您将进入上次创建的联系人的编辑屏幕。添加第一个联系人后,无法再添加更多联系人。需要更改的内容,以便您可以添加多个联系人 我为使其正常工作所做的更改: 每次按下“添加”按钮时,创建一个新的editContactsView。这将显示一个空白编辑屏幕,但新联系人仍会覆盖以前添加的内容Gwt 大规模应用程序开发和MVP教程中的问题,gwt,Gwt,我最近试着跟随这个故事。这个教程很棒,但我在一些事情上遇到了困难 如果尝试将联系人添加到列表中,则会创建该联系人。如果您尝试添加另一个联系人,您将进入上次创建的联系人的编辑屏幕。添加第一个联系人后,无法再添加更多联系人。需要更改的内容,以便您可以添加多个联系人 我为使其正常工作所做的更改: 每次按下“添加”按钮时,创建一个新的editContactsView。这将显示一个空白编辑屏幕,但新联系人仍会覆盖以前添加的内容 确定新联系人的ID时,将contacts.size()更改为contacts.
确定新联系人的ID时,将contacts.size()更改为contacts.size()+1 添加新联系人时,其id从未设置。由于id字段是字符串,因此它存储为“”。这就是添加第一个联系人的方式。现在,每次创建新联系人时,都会用键“”覆盖联系人。要解决此问题,您需要设置id的值。我通过更改EditContactsPresenter中的doSave方法来完成此操作
private void doSave() {
contact.setFirstName(display.getFirstName().getValue());
contact.setLastName(display.getLastName().getValue());
contact.setEmailAddress(display.getEmailAddress().getValue());
if(History.getToken.equals("add")
rpcService.updateContact(contact, new AsyncCallback<Contact>() {
public void onSuccess(Contact result) {
eventBus.fireEvent(new ContactUpdatedEvent(result));
}
public void onFailure(Throwable caught) {
Window.alert("Error updating contact");
}
});
else
rpcService.updateContact(contact, new AsyncCallback<Contact>() {
public void onSuccess(Contact result) {
eventBus.fireEvent(new ContactUpdatedEvent(result));
}
public void onFailure(Throwable caught) {
Window.alert("Error updating contact");
}
});
}
private void doSave(){
contact.setFirstName(display.getFirstName().getValue());
contact.setLastName(display.getLastName().getValue());
contact.setEmailAddress(display.getEmailAddress().getValue());
if(History.getToken.equals(“add”)
updateContact(联系人,新建AsyncCallback(){
成功时公共无效(联系结果){
fireEvent(新的ContactUpdateEvent(结果));
}
失败时的公共无效(可丢弃){
Window.alert(“更新联系人时出错”);
}
});
其他的
updateContact(联系人,新建AsyncCallback(){
成功时公共无效(联系结果){
fireEvent(新的ContactUpdateEvent(结果));
}
失败时的公共无效(可丢弃){
Window.alert(“更新联系人时出错”);
}
});
}
事实上,有几个问题(从我所看到的):
- 与前面提到的Lumpy一样,通过
创建的新EditContactPresenter
没有分配id(它是Contact
)。这是因为null
使用默认的EditContactPresenter
不设置id的构造函数。有很多可能的解决方案:在默认构造函数中添加id设置(这样你就不必在应用程序的其他地方跟踪id),将该功能委托给服务器(例如,让数据库生成下一个可用id并将其发送回服务器)或者只需在Contact()
EditContactsPresenter
- AppController.java:134-此示例重用视图(这是一个好主意),但如果您将其用于创建新的
,则不会清除该视图。解决方案:禁用视图重用(每次只需创建一个新的联系人
)或添加一个EditContactsView
或类似于您的视图的内容,并让演示者在创建新条目时调用它,而不是编辑现有条目(在这种情况下,当前条目中的值将覆盖旧值,因此可以)clear()
奇怪的是,这个示例留下了这样的bug——虽然我知道它的主要目的是展示MVP和GWT是如何结合在一起的,但是://您是自己编写源代码还是运行Contacts2.zip文件中提供的代码?我运行Contacts2.zip代码。没有任何更改。