从null对象的绑定:RuntimeException:java.lang.reflect.InvocationTargetException

时间:2012-04-16 08:59:55

标签: playframework-2.0

我正在继续学习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;
}
}

BTW,我使用mySql作为我的数据库。我有一个有效的用户,代码工作得很好......

更新17-04-2012

如果您在Play2.0中遇到过奇怪的事情,请仔细调试。我来自PHP,我尝试使用sysouts进行调试!但那不行。运行播放调试运行并点击F6直到你知道它出错的地方!

在我的情况下,我正在记录尚未保存在数据库中的东西,实际上它还不存在!

1 个答案:

答案 0 :(得分:0)

这是一个错字(静态部分)?

public static class Login {
}

如果不是那可能是原因。 AFAIK表格类必须是POJO。