Play框架有时需要getter和setter,有时则不需要

时间:2013-09-06 08:50:16

标签: java playframework-2.0 web-deployment

我开始了一个基于游戏的简单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(在启动项目时生成的默认控制器)时,它只使用了字段。

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

0 个答案:

没有答案