Pregunta

Tengo que mi propio método en el esquema RPC mediante el marco de GWT. Ahora, tengo que añadir otro método.

Por lo tanto, he escrito este código para cada parte de 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);
    }
});

como se puede ver, he añadido el anotherFunction () método (booleano), pero Netbeans me dice que tengo que implementa todos los métodos abracts sobre allCheckLogin, pero no voy a hacerlo :) ¿Cómo puedo solucionar este problema?

¿Fue útil?

Solución

Así Netbeans se queja de la falta onFailure método, ¿verdad? Si no desea implementar este método cada vez que escriba usted mismo una clase abstracta como:

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

A continuación, puede cambiar el código en:

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

Ahora usted no necesita implementar onFailure más, salvo que sea necesario para llevar a cabo la gestión de errores adicionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top