这可能看起来很基本,但我是 JPA/Ebean 和 Play 框架的新手(顺便说一句,Java 不是那么新)。
我正在尝试制作两种形式。一个登录,一个注册。我正在使用 Play for Java MEAP (Early Access) 一书、官方网站文档和示例应用程序“ZenTask”代码。我必须说 Play 很强大,很强大,但是文档太差了。我知道这一定与大多数 Play 用户都是经验丰富的 Java Web 开发人员有关,但仍然如此!
我创建了一个名为 User 的模型
@Entity
@Table(name="account")
public class User extends Model {
@Id
@Constraints.Required
@Formats.NonEmpty
public String email;
@Constraints.Required
public String displayName;
@Constraints.Required
public String password;
public static Model.Finder<String, User> find = new Model.Finder(String.class, User.class);
public static User authenticate(String email, String password) {
return find.where()
.eq("email", email)
.eq("password", password)
.findUnique();
}
}
然后我有这个控制器应用程序
public class Application extends Controller {
public static class Login {
@Constraints.Required
public String email;
public String password;
public String validate() {
if (User.authenticate(email,password)==null) {
return "Invalid email or password.";
}
return null;
}
}
public static class Register {
@Constraints.Required
public String email;
public String password;
public String cfmPassword;
public String displayName;
public String validate() {
if (cfmPassword.equals(password)) {
return "Passwords typed in does not match.";
} else if (displayName.contains(" ")) {
return "Display name cannot contain space";
}
return null;
}
}
}
我什至不明白为什么要创建两个嵌套类,但似乎需要在 Play 中创建表单?所以我做了两个。这是我用来呈现页面的代码(它在控制器应用程序中)
public static Result index() {
return ok(index.render(form(Login.class), form(Register.class)));
}
好的,现在最令人沮丧的部分来了。首先,我不知道我在登录时是否真的对用户进行了身份验证:(应用程序中的代码)
/**
* Handle login form submission.
*/
public static Result authenticate() {
Form<Login> loginForm = form(Login.class).bindFromRequest();
if (loginForm.hasErrors()) {
return badRequest(index.render(loginForm, form(Register.class)));
} else {
session("email", loginForm.get().email);
return redirect(controllers.routes.Wall.index());
}
}
第二,用户注册时如何说出用户信息。我从 Java for Play 书中复制了这些行,但它不起作用(我的 IDE 说这是错误的......类型不匹配)
public static Result register() {
Form<Register> RegisterForm = form(Register.class).bindFromRequest();
if (RegisterForm.hasErrors()) {
return badRequest(index.render(form(Login.class), RegisterForm));
} else {
User user = RegisterForm.get();
session("email", RegisterForm.get().email);
return redirect(controllers.routes.Wall.initiate());
}
}
我一定在这里做错了什么……有人能启发我吗?