用户登录/ GWT时启用页面上的按钮

时间:2015-10-22 11:36:57

标签: java gwt login webpage

我在GWT中有一个带有几个“编辑”按钮的页面。我添加了一个登录对话框。默认情况下,该按钮被禁用。

我想要做的是仅在用户登录后启用按钮。

此外,只要我在if子句中放入多个运算符,它就会停止工作。如果我只放loggedIn = true,那么它可以工作(我的意思是它超出了if子句并继续)。

我正在使用全局布尔变量:

Boolean loggedIn = false;

以下是我的工作:

public void login(final VerticalPanel vp, final RootPanel rp) {

    final DialogBox db = new DialogBox();
    db.setAnimationEnabled(true);
    db.setGlassEnabled(true);

    final VerticalPanel vp0 = new VerticalPanel();
    vp0.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
    vp0.setWidth("100%");

    final HTML loginLabel = new HTML("Login:");
    loginLabel.setStyleName("h1");

    final FlexTable ft0 = new FlexTable();
    final FlexCellFormatter cf = ft0.getFlexCellFormatter();
    ft0.setCellSpacing(10);

    ft0.setHTML(0, 0, "Login:");
    cf.setStyleName(0, 0, "h3");
    cf.setAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_MIDDLE);

    final TextBox loginBox = new TextBox();
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        public void execute() {
            loginBox.setFocus(true);
        }
    });
    ft0.setWidget(0, 1, loginBox);

    ft0.setHTML(1, 0, "Password:");
    cf.setStyleName(1, 0, "h3");
    cf.setAlignment(1, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_MIDDLE);

    final PasswordTextBox passwordBox = new PasswordTextBox();
    ft0.setWidget(1, 1, passwordBox);


    final Button loginButton = new Button(
        "Login", new ClickHandler() {
            public void onClick(ClickEvent event) {
                if ((loginBox.getText() == "1234") && passwordBox.getText() == "1234") {
                    final HTML loginSuccessMsg = new HTML("Logged in. Please wait...");
                    db.add(loginSuccessMsg);
                    loggedIn = true;

                    db.hide();
                    rp.clear();
                    rp.add(vp);
                }
                else {
                    final HTML loginErrorMsg = new HTML("Username/Password incorrect! Try again.");
                    db.add(loginErrorMsg);
                }



            }
        }
    );

    passwordBox.addKeyPressHandler(new KeyPressHandler() { 
        public void onKeyPress(KeyPressEvent event) { 
            if (((int)event.getCharCode()) == 13) { 
                loginButton.click();
            } 
        } 
    });

    ft0.setWidget(2, 0, loginButton);
    cf.setColSpan(2, 0, 2);
    cf.setAlignment(2, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE);

    vp0.add(ft0);
    db.add(vp0);
    int left = Window.getClientWidth() / 3;
    int top = Window.getClientHeight() / 3;
    db.setPopupPosition(left, top);
    db.show();
    //vp.add(vp0);

}

这是登录方式。

这是我使用loggedIn变量的地方:

if (loggedIn) butTotalNumQuick.setEnabled(true); else butTotalNumQuick.setEnabled(false);

此外,还有一些细节 - 默认情况下,此按钮处于禁用状态,因此可以使用。

我认为问题在于登录后需要刷新页面(面板)。这是我试图用

做的
rp.clear();
rp.add(vp);

其中rpRootPanel

2 个答案:

答案 0 :(得分:0)

您应该关注以下几点:

Boolean loggedIn = false;

为什么使用布尔对象?如果没有特殊原因,我没有考虑,那么使用原始类型。

此外,你不应该使用全局,这与oo原则相矛盾。特别是当变量代表一个状态时。重新设计您的应用程序,您可以访问所需的变量。如果您需要帮助,请询问或查看一些教程。

 if ((loginBox.getText() == "1234") && passwordBox.getText() == "1234")

第三,不要在应用程序的客户端保存密码。从JavaScript中读出它们然后闯入你的应用程序并不难。

如果您的登录程序只是某个服务器通信的占位符,您希望稍后添加,那么您也遇到了一个新问题。此通信可能是异步的,如果您设计应用程序,则必须牢记这一点。

此外,您最后一段代码段可以合并到:

butTotalNumQuick.setEnabled(loggedIn)

答案 1 :(得分:0)

您的错误是rp.add(vp);添加了您刚刚删除的vp

if (loggedIn) butTotalNumQuick.setEnabled(true); else butTotalNumQuick.setEnabled(false);
永远不会打电话给

。更简单的方法是从ClickHandler内部访问您的按钮,并为butTotalNumQuick按钮设置Global变量。无需在login()方法中将vp和rp作为参数发送。

示例:

private Button butTotalNumQuick = new Button();

...

public void login() {

    ...

    if ((loginBox.getText() == "1234") && passwordBox.getText() == "1234") {
                    final HTML loginSuccessMsg = new HTML("Logged in. Please wait...");
                    db.add(loginSuccessMsg);
                    loggedIn = true;

                    butTotalNumQuick.setEnabled(loggedIn)
                }
}