Play 2.0の学習を続けており、ログインフォームに取り組んでいます。基本的に、Zentasksが提供するサンプルプロジェクトと同様のフォーム...
私の問題は、データベースにユーザーが見つからなかった場合のエラーメッセージです。エラーは、次の行で発生します。
Form<Login> loginForm = form(Login.class).bindFromRequest();
私のモデルは次のようになります:
@Entity
public class Person extends Model {
@Constraints.Required
public String password;
@Constraints.Required
public String email;
// -- Queries
public static Model.Finder<String, Person> find = new Model.Finder(String.class, Person.class);
/**
* Authenticate a User.
*/
public static Person authenticate(String email, String password) {
Logger.info("email: " + email + " and password is:" + password);
return find.where().eq("email", email).eq("password", password).findUnique();
}
/**
* Retrieve all users.
*/
public static List<Person> findAll() {
return find.all();
}
// --
}
そして私のコントローラーは次のようになります:
/**
* Handle login form submission.
*/
public static Result authenticate() {
play.Logger.info("Entering authenticated method...");
Form<Login> loginForm = form(Login.class).bindFromRequest(); //ERROR OCCURS HERE
if (loginForm.hasErrors()) {
return badRequest(views.html.login.render(loginForm));
} else {
session("email", loginForm.get().email);
return redirect(routes.LandingPage.index());
}
}
そして、Application.java内の私のLoginクラス:
public static class Login {
public String email;
public String password;
public String validate() {
Logger.info("Entering validation in class login... " + email + " " + password);
if (Person.authenticate(email, password) == null) {
return "Invalid user or password";
}
return null;
}
}
ところで、私はデータベースとしてmySqlを使用しています。そして、私には有効なユーザーがいて、コードは問題なく機能しています...
更新17-04-2012
Play2.0で奇妙なことに遭遇した場合は、慎重にデバッグしてください。私はPHPから来て、sysoutsでデバッグしてみました!しかし、それは大丈夫ではありません。play debug runを実行し、どこで問題が発生するかがわかるまでF6キーを押します。
私の場合、データベースにまだ保存されていないものをログに記録していましたが、実際にはまだ存在していませんでした。