2

我开始了一个基于 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())
        );
    }
}

当我在应用程序(启动项目时生成的默认控制器)中定义登录时,它只使用字段。

这种行为的根源是什么?任何提示都可能会有所帮助。

4

0 回答 0