В настоящее время я создаю серверную WebApp на основе Java, используя Vaadin. Теперь я ньюб в отношении Ваадина, поэтому, пожалуйста, будьте осторожны. ;)Java: Vaadin Login-screen Web-App ведет себя неестественно
Вот моя проблема: в настоящее время я строю экран входа в систему. Я настраивал имя пользователя и пароль как глобальные переменные для целей тестирования. На экране входа в систему пользователь просто вводит свое имя пользователя и пароль, а при нажатии кнопки входа в систему код сравнивает значения, введенные в текстовые поля, с значениями глобальных переменных. Если значения совпадают, всплывающее уведомление о том, что логин был успешным, в противном случае вы просто получите сообщение об ошибке.
Вот проблема: когда я вызываю значение String для username.getValue()
(из текстового поля) и сравниваю его с именем пользователя, хранящимся в глобальной переменной, оператор if-else всегда переходит к ветке else, что указывает на то, что для некоторые эзотерические причины, строки не совпадают. Дело в том, что они делают. Просто, чтобы убедиться, что я не наблюдал за чем-либо, я печатаю значения, введенные в текстовые поля на консоли, и способ их получения точно соответствует тому, как данные хранятся в глобальных переменных.
Кто-нибудь есть идеи, почему этот кусок кода пытается ввернуться с моим здравомыслием?
Вот код:
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 LOCALHOST стороны клиента (на данный момент). Любая помощь будет принята с благодарностью!
Вы должны всегда использовать .equals() для сравнения строк не == –
Ну, у нас это есть. решил это. Тем не менее, есть одна вещь, которая меня заинтересовала бы: какая разница в обработке данных при использовании == и .equals? означает «логическое» выражение, они делают то же самое, но как именно язык программирования или компилятор интерпретируют это? –
Например, это объясняет это: http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –