2012-04-16 13 views
5

Continúo aprendiendo para Play 2.0 y estoy trabajando en un Formulario de inicio de sesión. Básicamente forma similar a la del proyecto de ejemplo Zentasks proporcionar ...Encuadernación en objeto nulo: RuntimeException: java.lang.reflect.InvocationTargetException

Mi problema es el mensaje de error cuando ningún usuario se puede encontrar en la base de datos, el error se produce en la siguiente línea:

Form<Login> loginForm = form(Login.class).bindFromRequest(); 

Mi Modelo parece:

@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(); 
} 

// -- 

} 

Y mi controlador se parece a:

/** 
* 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()); 
} 
} 

Y mi clase de sesión dentro de la Application.java:

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; 
} 
} 

Por cierto, me usar MySQL como mi base de datos. Y tengo un usuario válido el código está trabajando muy bien ...

ACTUALIZACIÓN 17-04-2012

Si alguna vez se encuentra con algo extraño en Play2.0 simplemente depurar cuidadosamente. Vengo de PHP y probé a depurar con sysouts! Pero eso no está bien. Ejecute ejecute la ejecución de depuración y presione F6 hasta que sepa dónde sale mal.

En mi caso estaba registrando algo que no se ha guardado aún en la base de datos, de hecho, ¡aún no existía!

Respuesta

0

¿Es esto un error tipográfico (estático parte)?

public static class Login { 
} 

Si no puede ser el motivo. AFAIK las clases de formulario deben ser POJO.

+0

Si elimino la palabra clave static obtengo el error de compilación: escriba Login no es miembro de los controladores de objetos. Aplicación. Por cierto: la estática también se menciona en el proyecto de muestra de zentask ... – adis

+1

Solo como prueba, ¿puedes mover la clase fuera de la clase Aplicaciones, a su propio archivo, como clase pública, y volver a intentarlo? Recuerde actualizar las importaciones. –

+0

Hi Pierre, con la clase Login.class separada todavía no funcionó. Funciona cuando utilicé una de mis clases de modelo, una clase de persona básica. No entiendo este comportamiento ... – adis