2010-08-03 42 views
4

我最近试图关注Large scale application development and MVP tutorial。该教程非常棒,但我有一些困难的时候,有一些东西。大规模应用程序开发和MVP教程中的问题

如果您尝试将联系人添加到列表中,则会创建该联系人。如果您尝试添加其他联系人,则会转到您创建的最后一位联系人的编辑屏幕。添加第一个联系人后,无法添加更多联系人。需要更改什么才能添加多个联系人。

变化我已经作出尝试,并得到它的工作:

创建一个新的editContactsView每添加按钮被按下的时间。这带来了一个空白的编辑屏幕,但新的联系人仍然覆盖以前的添加。

确定新联系人的ID时,将contacts.size()更改为contacts.size()+ 1。

+0

你写出来的源代码,自己或你在运行Contacts2.zip文件中提供的代码吗? – dgrant 2010-08-05 00:07:45

+0

我正在运行Contacts2.zip代码。根本没有变化。 – Lumpy 2010-08-05 10:14:28

回答

6

其实,有几个问题(从我所看到的):

  • 样结节已经提到,通过EditContactPresenter创建没有获得指定ID的新Contact(这是null )。这是因为EditContactPresenter使用未设置id的默认Contact()构造函数。有很多可能的解决方案:在默认构造函数中添加设置id(这样您就不必跟踪应用程序中其他位置的id),将该函数委托给您的服务器(例如,让您的数据库产生下一个可用的ID,并发送回),或只是在EditContactsPresenter
  • AppController.java:134添加contact.setId(whatever);在适当的地方 - 这个例子重用的观点(这是一个好主意),它不清除它,如果你使用它来创建一个新的Contact。解决方案:要么禁用视图重用(每次只新建一个EditContactsView),要么添加一个clear()或者类似于您的视图,并让演示者在他们想创建新条目时调用它,而不是编辑现有的条目(在这种情况下,来自当前条目的值覆盖旧值,所以没关系)。

这很奇怪,这个样品留下了这样的错误 - 尽管我明白,它的主要目的是展示MVP和GWT如何走在一起,但仍:/

0

当添加新联系人时,它的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");   
     }  
    }); 
} 
相关问题