我开始了一个基于 play 的简单 webapp。经过一些重构后,登录表单停止工作。我使用了一个带有简单公共字段的实体 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())
);
}
}
当我在应用程序(启动项目时生成的默认控制器)中定义登录时,它只使用字段。
这种行为的根源是什么?任何提示都可能会有所帮助。