2010-11-17 25 views
1

我使用GWT框架在RPC模式中創建了自己的方法。現在,我需要添加另一種方法。GWT - 在RPC配置中管理布爾方法

所以,我寫了這個代碼RPC的各個部分:

package org.sinfonet.client; 

import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("gwtservice") 
public interface GWTService extends RemoteService { 
    public String checkLogin(String nickname, String password); 
    public boolean anotherFunction(String nickname); 
} 

######################################################### 

package org.sinfonet.client; 

import com.google.gwt.user.client.rpc.AsyncCallback; 

public interface GWTServiceAsync { 
    public void checkLogin(String nickname, String password, AsyncCallback<String> callback); 
    public void anotherFunction(String nickname, AsyncCallback<java.lang.Boolean> asyncCallback); 
}  

######################################################### 

package org.sinfonet.server; 

import com.google.gwt.user.server.rpc.RemoteServiceServlet; 
import java.util.ArrayList; 

import org.sinfonet.client.GWTService; 
import org.sinfonet.mgmt.Configuration; 
import org.sinfonet.mgmt.Database; 

public class GWTServiceImpl extends RemoteServiceServlet implements GWTService { 
    public String checkLogin(String nickname, String password) { 
     Database mydb=Configuration.getDatabase(); 
     mydb.connetti(); 

     // faccio md5 ed escape 
     String log_check_user=nickname; 
     String log_check_pass=password; 

     // controllo che l'utente esista 
     ArrayList<String[]> db_result=null; 
     db_result=mydb.selectQuery("SELECT nickname FROM users WHERE nickname='"+log_check_user+"' AND password='"+log_check_pass+"'"); 
     if(db_result.size()!=0) { 
      return "YES"; 
     } 

     // sconnessione al database 
     mydb.disconnetti(); 

     return "NO"; 
    } 

    public boolean anotherFunction(String nickname) { 
     // somethings others 
     return true; 
    } 
} 

######################################################### 

final AsyncCallback<java.lang.Boolean> callCheckLogin = new AsyncCallback<java.lang.Boolean>() { 
    public void onSuccess(boolean result) { 
     if(result) { 
      designLogout(menu_login_label1.getText()); 
     } else { 
      menu_err.setText("Username e password non validi"); 
     } 
    } 
}; 

// Listen for the button clicks 
menu_login_button.addClickHandler(new ClickHandler(){ 
    public void onClick(ClickEvent event) { 
     // Make remote call. Control flow will continue immediately and later 
     // 'callback' will be invoked when the RPC completes. 
     getService().anotherFunction(menu_login_input1.getText(), callCheckLogin); 
    } 
}); 

,你可以看到,我添加了anotherFunction()方法(布爾),但Netbeans的對我說,我需要實現所有abracts關於allCheckLogin的方法,但我不會這樣做:)我該如何解決這個問題?

回答

5

因此Netbeans抱怨缺少onFailure方法,對吧?如果你不希望每次執行該方法,自己寫一個抽象類,如:

public abstract class BaseAsyncCallback<T> implements AsyncCallback<T> { 
    @Override 
    public void onFailure(Throwable caught) { 
     // Perform generic failure handling 
    } 
} 

然後你就可以改變你的代碼:

final AsyncCallback<java.lang.Boolean> callCheckLogin = 
    new BaseAsyncCallback<java.lang.Boolean>() { 
     public void onSuccess(java.lang.Boolean result) { 
     ... 
     } 
    }; 

現在你不需要實現onFailure了,除非你需要執行額外的錯誤處理。

+0

uhm。但如果我改變我的代碼與「公共無效onSuccess(布爾結果)」錯誤消失:) – markzzz 2010-11-17 15:38:11

+1

很好。在所有的時候,我都畏懼了重複的錯誤處理,我很失望,我沒有想到子類化AsyncCallback。 – 2010-11-17 19:42:26