Formular-Validierung play framework 2.0

Ich bin nach dem tutorial auf http://www.playframework.org/documentation/2.0/JavaForms

Habe ich eine Klasse angelegt LoginForm.java (Statt User.class aus dem Beispiel. Keine Klasse für beibehalten, nur eine form ist-Werte und-Halter)

package domain;

import static play.data.validation.Constraints.*;

public class LoginForm {

        @Required
        public String email;
        public String password;

}

Und in meinem controller habe ich zu tun (wie das Beispiel), aber ich die Werte leere Zeichenfolgen zu versuchen, das @Required-annotation.

Form<LoginForm> loginForm = form(LoginForm.class);
Map<String,String> anyData = new HashMap();
anyData.put("email", "");
anyData.put("password", "");

//Faking a post
LoginForm postedLoginForm = loginForm.bind(anyData).get();

if(loginForm.hasErrors()) {
  //Just for this test task, should have another error handling..
  return ok("@Required annotation kicked in..");
} else {
  return ok("Got form values, email: " + postedLoginForm.email + " password: " + postedLoginForm.password);
}

Aber:

LoginForm postedLoginForm = loginForm.bind(anyData).get();

Bekomme ich eine Ausführung exception [[IllegalStateException: No value]]

So dass es nie geprüft,/kommt zu

if(loginForm.hasErrors()) 

Weiß jemand, warum das so ist? Wenn ich die Werte als Beispiel:

Map<String,String> anyData = new HashMap();
anyData.put("email", "[email protected]");
anyData.put("password", "secret");

Alles funktioniert und ich wieder an die LoginForm Objekt mit den richtigen Werten.
Soll ich die Exception fangen? Sollte nicht spielen, aufzupassen, dass und set loginForm.hasErrors = true?

Vielen Dank für jede Hilfe!!!

  • Es scheint, wie die IllegalStateException wird aus bind. Vielleicht, dass die Methode nicht erlaubt bind oder get wenn Ihre Karte hat keine Daten.
  • Ich sehe aber das gleiche gilt für eine echte post, wenn ich loginForm.bindFromRequest().get(), die bindet Daten aus dem request. Wie würde man überprüfen, ob der Benutzer nicht alle Daten in die Formularfelder? Ohne zu schreiben, eine eigene validate-Methode?
  • Aber Sie haben gesagt, die eigentliche post-Werke, in denen Sie keine leeren Werte in der Karte.
  • Sorry, die echte post hat nicht funktioniert entweder. Mit leeren Eingabefeldern Werte.
  • Also der post mit einem besiedelten E-Mail und Passwort nicht funktioniert? Sie sagte, es funktioniert wie erwartet funktioniert in deinem post.
  • Ja, der real - /fake-post mit besiedelten Bereichen funktioniert. Dann die gewünschte annotation nicht stört. Aber wenn die E-Mail-Feld leer ist (was hat das @Required-annotation). Die exception geworfen wird. Sollte nicht loginForm.hasErrors() wahr sein? Statt einer ausgelösten Ausnahme?
  • Das ist, was ich früher sagte etwa könnte es mit bind oder get und die Tatsache, dass es leer ist. Sie sollten beginnen Sie mit der Suche dort.
  • Aber was ist der Zweck, das @Required-annotation dann?
  • Sollte es nicht überprüfen, ob das Feld einen Wert hat. Andernfalls setzen Sie die hasErrors zu wahren?

InformationsquelleAutor John Rodrick | 2012-04-02
Schreibe einen Kommentar