Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Vaadin登录屏幕Web应用程序行为不自然_Java_String_Login_Vaadin7 - Fatal编程技术网

Java:Vaadin登录屏幕Web应用程序行为不自然

Java:Vaadin登录屏幕Web应用程序行为不自然,java,string,login,vaadin7,Java,String,Login,Vaadin7,我目前正在使用Vaadin构建一个java服务器端WebApp。现在,关于瓦丁,我是个新手,所以请温柔一点 我的问题是:我目前正在构建登录屏幕。出于测试目的,我将用户名和密码设置为全局变量。在登录屏幕上,用户只需输入用户名和密码,在登录按钮上,代码将文本字段中输入的值与全局变量的值进行比较。如果值匹配,将弹出一个通知,说明登录成功,否则只会收到一个错误通知 问题是:当我调用username.getValue()(从textfield)的字符串值并将其与存储在全局变量中的用户名进行比较时,if-e

我目前正在使用Vaadin构建一个java服务器端WebApp。现在,关于瓦丁,我是个新手,所以请温柔一点

我的问题是:我目前正在构建登录屏幕。出于测试目的,我将用户名和密码设置为全局变量。在登录屏幕上,用户只需输入用户名和密码,在登录按钮上,代码将文本字段中输入的值与全局变量的值进行比较。如果值匹配,将弹出一个通知,说明登录成功,否则只会收到一个错误通知

问题是:当我调用
username.getValue()
(从textfield)的字符串值并将其与存储在全局变量中的用户名进行比较时,if-else语句总是跳转到else分支,这表明出于某种深奥的原因,字符串不匹配。事情是这样的。为了确保我没有监督任何事情,我正在控制台上打印文本字段中输入的值,并且
.getValue()
获取它们的方式与全局变量中存储数据的方式完全对应

有人知道为什么这段代码会破坏我的理智吗

代码如下:

package com.example.vaadintestgui;

import java.util.Locale;

import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.Page;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Notification;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
@Theme("vaadintestgui")
public class VaadintestguiUI extends UI {

private static final String username = "admin";
private static final String password = "r00t";

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = VaadintestguiUI.class)
public static class Servlet extends VaadinServlet {
}

@Override
protected void init(VaadinRequest request) {
    final VerticalLayout layout = new VerticalLayout();
    layout.setMargin(true);
    setContent(layout);

    UI.getCurrent().setLocale(new Locale("en"));
    Page.getCurrent().setTitle("Login");



    final TextField uname = new TextField("Username:");
    final PasswordField pass = new PasswordField("Password:");


    Button loginButton = new Button("Login");
    loginButton.addClickListener(new Button.ClickListener() {
        public void buttonClick(ClickEvent event) {
            Notification.show("Cheking Credentials...");

            // Just for debugg purposes:
            System.out.println("uname: "+uname.getValue()+" password: "+pass.getValue());

            // Something is wrong here....:
            if(uname.getValue() == username && pass.getValue() == password){
                Notification.show("Login Succesfull!");
            } else {
                Notification.show("Wrong login credentials. Please try again.");
                }
        }
    });

    layout.addComponent(uname);
    layout.setComponentAlignment(uname, Alignment.MIDDLE_CENTER);
    layout.addComponent(pass);
    layout.setComponentAlignment(pass, Alignment.MIDDLE_CENTER);
    layout.addComponent(loginButton);
    layout.setComponentAlignment(loginButton, Alignment.MIDDLE_CENTER);
}
}


我正在客户端tomcat8本地主机服务器上运行该应用程序(目前)。任何帮助都将不胜感激

比较字符串时应该始终使用.equals()而不是==

您应该始终使用.equals()来比较字符串,而不是==好吧,我们有了它。解决了。然而,有一件事我会感兴趣:当使用==和.equals时,数据处理有什么不同?意思是“逻辑上”说它们做的是相同的,但是编程语言或编译器究竟如何解释它呢?例如,这解释了它:谢谢你清除了它@SpadeJohnsson请接受您自己发布的答案,以结束此问题。