2012-04-16 7 views
5

Ich bin weiterhin lernen für Play 2.0 und ich arbeite an einem Login-Formular. Grundsätzlich ist die ähnliche Form wie das Beispielprojekt Zentasks bieten ...Frombinding auf Null-Objekt: RuntimeException: java.lang.reflect.InvocationTargetException

Mein Problem ist die Fehlermeldung, wenn kein Benutzer in der Datenbank gefunden werden konnte, wird der Fehler in der folgenden Zeile auftritt:

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

My Model wie folgt aussieht:

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

// -- 

} 

Und mein Controller wie folgt aussieht:

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

Und meine Login-Klasse in der 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; 
} 
} 

BTW, ich benutze mySql als meine Datenbank. Und ich habe ein gültiger Benutzer der Code funktioniert ganz gut ...

UPDATE 17-04-2012

Wenn Sie jemals in Merkwürdige in Play2.0 laufen nur vorsichtig debuggen. Ich komme aus PHP und habe versucht, mit Sysouts zu debuggen! Aber das ist nicht in Ordnung. Führen Sie Debug-Lauf und drücken Sie F6, bis Sie wissen, wo es schief geht!

In meinem Fall war ich Logging etwas, das noch nicht in der Datenbank gespeichert wurde, in Wirklichkeit war es noch nicht vorhanden!

Antwort

0

Ist dies ein Tippfehler (der statische Teil)?

public static class Login { 
} 

Wenn nicht, kann das der Grund sein. AFAIK die Form-Klassen müssen POJOs sein.

+0

Wenn ich das Schlüsselwort statisch entferne, bekomme ich den Kompilierungsfehler: Typ Login ist kein Mitglied des Objekts controllers.Application. BTW: die statische ist auch wie im zentask Beispielprojekt erwähnt ... – adis

+1

Kannst du die Klasse als eine Testversion aus der Klasse Anwendungen in eine eigene Datei als öffentliche Klasse verschieben und es erneut versuchen? Denken Sie daran, die Importe zu aktualisieren. –

+0

Hallo Pierre, mit der Login.class getrennt hat es noch nicht geklappt. Es funktioniert, wenn ich eine meiner Model-Klassen, eine grundlegende Personenklasse verwendet habe .. Ich verstehe dieses Verhalten nicht ... – adis

Verwandte Themen