2009-05-29 35 views
0

我正在開發一個GWT項目,並有幾個無效的遠程服務似乎執行得很好,但在客戶端,最終發射了onFailure()方法。任何地方都不會拋出異常,並且在後端觀察到預期的行爲。我不知道會出現什麼問題。下面是相關代碼:GWT虛假的遠程服務似乎沒有理由

接口和實現...

@RemoteServiceRelativePath("DeleteSearchService") 
public interface DeleteSearchService extends RemoteService { 
    /** 
    * Utility class for simplifying access to the instance of async service. 
    */ 
    public static class Util { 
     private static DeleteSearchServiceAsync instance; 
     public static DeleteSearchServiceAsync getInstance(){ 
      if (instance == null) { 
       instance = GWT.create(DeleteSearchService.class); 
      } 
      return instance; 
     } 
    } 

    public void delete(SearchBean search); 
} 

public interface DeleteSearchServiceAsync { 
    public void delete(SearchBean bean, AsyncCallback<Void> callback); 
} 

public class DeleteSearchServiceImpl extends RemoteServiceServlet implements DeleteSearchService { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void delete(SearchBean search) { 
     try { 

      Connection conn = SQLAccess.getConnection(); 
      String sql = "DELETE FROM `searches` WHERE `id`=?"; 

      PreparedStatement ps = conn.prepareStatement(sql); 
      ps.setInt(1, search.getSearchId()); 

      ps.execute(); 

      sql = "DELETE FROM `searchsourcemap` WHERE `search-id` = ?"; 

      ps = conn.prepareStatement(sql); 
      ps.setInt(1, search.getSearchId()); 

      ps.execute(); 

      return; 

     } catch (Exception e) { 
      // TODO Log error 
      e.printStackTrace(); 
     } 
    } 
} 

調用代碼...

private class DeleteListener implements ClickListener { 
     public void onClick(Widget sender) { 
      DeleteSearchServiceAsync dss = DeleteSearchService.Util.getInstance(); 

      SearchBean bean = buildBeanFromGUI(); 

      dss.delete(bean, new AsyncCallback<Void>(){ 

       //@Override 
       public void onFailure(Throwable caught) { 
        // TODO log 
        SearchNotDeleted snd = new SearchNotDeleted(); 
        snd.show(); 
       } 

       //@Override 
       public void onSuccess(Void result) { 
        SearchDeleted sd = new SearchDeleted(); 
        sd.show(); 
        searchDef.getParent().removeFromParent();     
       } 

      }); 
     } 
    } 

我知道我是一個混蛋張貼像500行代碼,但我從昨天開始就一直盯着這個,不知道自己出錯的地方。也許第二一雙眼睛有點幫助

感謝, 布賴恩

+0

在AsyncCallback中傳遞給onFailure方法的捕獲變量的值是什麼? – Carnell 2009-05-29 21:17:43

回答

0

LGTM我害怕。

您是使用託管模式還是功能齊全的瀏覽器?你可以嘗試切換,看看它是否有幫助。

而且,當onFailure被調用時,它可能有助於收聽//TODO並執行GWT.log