2011-10-03 2 views
0

안녕하세요. Google 데이터 저장소에서 linkedhashset을 검색하려고하는데 아무 것도 보이지 않습니다. 한 페이지에 GWT를 사용하여 그리드에 결과를 표시하고 싶습니다. 모든 클래스에서 system.out.println()을 사용하여 잘못된 부분을 보았습니다.하지만 오류가 발생하지는 않습니다. 저는 서버 패키지 (ContactDAOJdo/ContactServiceImpl)에서 6 클래스 2를 사용하고 클라이언트 패키지 (ContactService/ContactServiceAsync/ContactListDelegate/ContactListGui)에서 4 클래스 4를 사용합니다. 왜 누군가가 이것이 효과가 없으며 올바른 방향으로 나를 가리키며 설명 할 수 있기를 바랍니다.GWT는 serviceimpl을 통해 데이터 저장소에서 목록을 검색합니다.

public class ContactDAOJdo implements ContactDAO { 
    @SuppressWarnings("unchecked") 
    @Override 
    public LinkedHashSet<Contact> listContacts() { 
    PersistenceManager pm = PmfSingleton.get().getPersistenceManager(); 
    String query = "select from " + Contact.class.getName(); 
    System.out.print("ContactDAOJdo: "); 
    return (LinkedHashSet<Contact>) pm.newQuery(query).execute(); 
    } 
} 

public class ContactServiceImpl extends RemoteServiceServlet implements ContactService{ 
    private static final long serialVersionUID = 1L; 
    private ContactDAO contactDAO = new ContactDAOJdo() { 
    @Override 
    public LinkedHashSet<Contact> listContacts() { 
    LinkedHashSet<Contact> contacts = contactDAO.listContacts(); 
    System.out.println("service imp "+contacts); 
    return contacts; 
    } 
} 

@RemoteServiceRelativePath("contact") 
public interface ContactService extends RemoteService { 
    LinkedHashSet<Contact> listContacts(); 
} 

public interface ContactServiceAsync { 
    void listContacts(AsyncCallback<LinkedHashSet <Contact>> callback); 
} 

public class ListContactDelegate { 
private ContactServiceAsync contactService = GWT.create(ContactService.class); 
ListContactGUI gui; 
void listContacts(){ 
    contactService.listContacts(new AsyncCallback<LinkedHashSet<Contact>>() { 
     public void onFailure(Throwable caught) { 
      gui.service_eventListContactenFailed(caught); 
      System.out.println("delegate "+caught); 
     } 
     public void onSuccess(LinkedHashSet<Contact> result) { 
      gui.service_eventListRetrievedFromService(result); 
      System.out.println("delegate "+result); 
     } 
    }); 
} 
} 

public class ListContactGUI { 
protected Grid contactlijst; 
protected ListContactDelegate listContactService; 
private Label status; 

public void init() { 
    status = new Label(); 
    contactlijst = new Grid(); 
    contactlijst.setVisible(false); 
    status.setText("Contact list is being retrieved"); 
    placeWidgets(); 

} 

public void service_eventListRetrievedFromService(LinkedHashSet<Contact> result){ 
    System.out.println("1 service eventListRetreivedFromService "+result); 
    status.setText("Retrieved contactlist list"); 
    contactlijst.setVisible(true); 
    this.contactlijst.clear(); 
    this.contactlijst.resizeRows(1 + result.size()); 
    int row = 1; 
    this.contactlijst.setWidget(0, 0, new Label ("Voornaam")); 
    this.contactlijst.setWidget(0, 1, new Label ("Achternaam")); 
    for(Contact contact: result) { 
     this.contactlijst.setWidget(row, 0, new Label (contact.getVoornaam())); 
     this.contactlijst.setWidget(row, 1, new Label (contact.getVoornaam())); 
     row++; 
     System.out.println("voornaam: "+contact.getVoornaam()); 
    } 
    System.out.println("2 service eventListRetreivedFromService "+result); 
} 

public void placeWidgets() { 
    System.out.println("placewidget inside listcontactgui" + contactlijst); 
    RootPanel.get("status").add(status); 
    RootPanel.get("contactlijst").add(contactlijst); 
} 

public void service_eventListContactenFailed(Throwable caught) { 
    status.setText("Unable to retrieve contact list from database."); 
} 
} 

답변

1

쿼리가 지연 목록을 반환 할 수 있습니다. 즉, 목록이 클라이언트에 전송되는 시점에 모든 값이 목록에있는 것은 아닙니다. 난 그냥 목록에 size()를 호출하는 트릭을 사용 (I는 해당 솔루션에 도착 방법을 잘 모르는,하지만 작동하는 것 같다) :

public LinkedHashSet<Contact> listContacts() { 
    final PersistenceManager pm = PmfSingleton.get().getPersistenceManager(); 
    try {   
    final LinkedHashSet<Contact> contacts = 
     (LinkedHashSet<Contact>) pm.newQuery(Contact.class).execute(); 
    contacts.size(); // this triggers to get all values. 
    return contacts; 
    } finally { 
    pm.close(); 
    } 

}

을하지만이 최고입니다 있는지 확실하지 않습니다 연습 ...

관련 문제