首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法捕获onFailure() GWT AsyncCallback

无法捕获onFailure() GWT AsyncCallback
EN

Stack Overflow用户
提问于 2016-04-15 18:32:18
回答 1查看 193关注 0票数 1

我正在创建一个需要用户身份验证的appliaction。当我试图登录时,我有一个问题。当我键入正确的用户名和密码时,将调用onSuccess方法。但是,当我键入错误的字段或空字段时,就不会调用onFailure()方法。

我真的很想知道为什么会这样。因为我不想在用户名或密码不正确时显示某种对话框。

这是ClickHandler,它从字段中获取用户名和密码:

代码语言:javascript
复制
loginButton.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            String username = usernameBox.getText();
            String password = passwordBox.getText();
            performUserConnection(username, password);
        }
    });

这是执行用户约束的方法,正如我所说,如果我有正确的用户名/密码,它就能工作。它显示我的警告消息,但如果不正确,则不显示任何警告消息。

代码语言:javascript
复制
private static void performUserConnection(String username, String password) {
    DBConnectionAsync rpcService = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpcService;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "DBConnectionImpl";
    target.setServiceEntryPoint(moduleRelativeURL);

    rpcService.authenticateUser(username, password, new AsyncCallback<User>() {

        @Override
        public void onSuccess(User user) {
            Window.alert("TRALALA. Username: " + user.getUsername());
        }

        @Override
        public void onFailure(Throwable caught) {
            Window.alert("LALALALAL");
            // DialogBox dialogBox = createDialogBox();
            // dialogBox.setGlassEnabled(true);
            // dialogBox.setAnimationEnabled(true);
            // dialogBox.center();
            // dialogBox.show();
        }
    });
}

更新服务器部件。

代码语言:javascript
复制
public class DBConnectionImpl extends RemoteServiceServlet implements DBConnection {

private static final long serialVersionUID = 1L;

private String URL = new String("jdbc:mysql://localhost:3306");
private String user = "root";
private String pass = "andrei";
private String schema = "administrare_bloc";

public DBConnectionImpl() {
}

private Connection getConnection() throws Exception {
    Properties props = new Properties();
    props.setProperty("user", user);
    props.setProperty("password", pass);
    props.setProperty("zeroDateTimeBehavior", "convertToNull");
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection conn = DriverManager.getConnection(URL + "/" + schema, props);

    return conn;
}

@Override
public User authenticateUser(String username, String password) throws Exception {

    User returnUser = null;
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    try {
        conn = getConnection();

        try {
            String q = "select * from users where username=? and password=?";
            stmt = conn.prepareStatement(q);
            stmt.setString(1, username);
            stmt.setString(2, password);
            rs = stmt.executeQuery();

            while (rs.next()) {
                int id = rs.getInt("id");
                String user = rs.getString("username");
                String pass = rs.getString("password");
                String type = rs.getString("type");

                returnUser = new User(id, user, pass, type);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    } catch (SQLException ex) {
        ex.printStackTrace();
    } finally {
        rs.close();
        stmt.close();
        conn.close();
    }

    return returnUser;
}

}

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 18:42:09

只有当您在服务器上抛出异常时,才会调用onFailure方法。现在,如果没有找到用户,您只需返回一个空对象。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36654483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档