我开始了一个基于游戏的简单webapp。经过一些重构后,登录表单停止了工作。我使用了一个带有简单公共字段的entity-bean。我将它从一个控制器移动到另一个控制器,同时重构和原因纠正了引用。它总是告诉我,我是一个无效的用户。
在调试过程中,我发现字段不再设置。然而,真正让我感到困惑的是:我手动将getter和setter添加到公共字段中并突然再次起作用。我现在已经做了很多研究,为什么它在名为“Application”的默认控制器中工作,而不是在我自己的名为“Registration”的控制器中工作。
涉及的代码不多,这里有几点:
public class RegistrationLogin extends Controller {
public static class Login {
@Required
public String email;
@Required
public String password;
public String validate() {
/* here is the interesting part, when I call "form.hasErrors" in
authenticateLogin and this validate-method gets called, email and
password both are null. If I create getters and setters they are set correctly */
if (User.authenticate(email, password) == null) {
return "Invalid user or password";
}
return null;
}
}
public static Result authenticateLogin() {
Form<Login> loginForm = form(Login.class).bindFromRequest("email", "password");
String title = "Login";
if (loginForm.hasErrors()) {
return badRequest(login.render(title,loginForm));
} else {
session().clear();
session("email", loginForm.get().email);
return redirect(
routes.Application.show(Ebean.find(User.class).where().ieq("email",loginForm.get().email).findUnique().getName())
);
}
}
当我在Application中定义了Login(在启动项目时生成的默认控制器)时,它只使用了字段。
这种行为的起源是什么?任何提示都可能有所帮助。