Форма валидации play Framework 2.0 - PullRequest
7 голосов
/ 02 апреля 2012

Я следую учебному пособию по http://www.playframework.org/documentation/2.0/JavaForms

Я создал класс LoginForm.java (вместо User.class из примера. Не класс для сохранения, просто держатель значений формы)

package domain;

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

public class LoginForm {

        @Required
        public String email;
        public String password;

}

И в моем контроллере я делаю (как пример), но я устанавливаю значения в пустые строки, чтобы попробовать аннотацию @Required.

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

Но по адресу:

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

Я получаю исключение Выполнения [[IllegalStateException: Нет значения]]

Так что он никогда не проверяет / не приходит к

if(loginForm.hasErrors()) 

Кто-нибудь знает, почему это так?Если я установлю значения в качестве примера:

Map<String,String> anyData = new HashMap();
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");

Все работает, и я получаю объект LoginForm с правильными значениями.Я должен поймать исключение?Не стоит ли позаботиться об этом и установить loginForm.hasErrors = true?

Спасибо за любую помощь!

Ответы [ 2 ]

25 голосов
/ 10 мая 2012

Это ожидаемое поведение.

Обратите внимание, что вы должны использовать .get () в форме После проверки на наличие ошибок.

LoginForm preLoginForm = loginForm.bind(anyData);

if(loginForm.hasErrors()) {
    //Just for this test task, should have another error handling..
    return ok("@Required annotation kicked in..");
}
LoginForm postedLoginForm = preLoginForm.get();
// ... Now use postedLoginForm 
0 голосов
/ 03 апреля 2012

Это похоже на ошибку в Play 2.0 framework.Мне удалось повторить ту же проблему локально.

Я открыл билет https://play.lighthouseapp.com/projects/82401-play-20/tickets/313 на случай, если вы захотите продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...