2014-09-03 2 views
0

Я пытаюсь поймать ошибки проверки при отправке запроса POST через HTML-форму. У меня есть следующий код в моем Application.java классе:Play framework не распознает ошибки?

public class Application extends Controller 
{ 
    .. 

    public static Result addSubscriber() 
    { 
     Form<Subscriber> subscriberForm = Form.form(Subscriber.class); 
     subscriberForm.bindFromRequest(); 
     Logger.warn(subscriberForm.toString()); 
     if (!(subscriberForm.hasErrors() || subscriberForm.hasGlobalErrors())) 
     { 
      Logger.error("dammit"); 
     } 
     else // never reaches here 
     ... 
    } 
} 

И в моем Subscriber.java классе:

@Entity 
public class Subscriber extends Model 
{ 
    @Id 
    public String email; 

    @CreatedTimestamp 
    Timestamp createdAt; 

    ... 

    public List<ValidationError> validate() 
    { 
     List<ValidationError> errors = new ArrayList<ValidationError>(); 

     Pattern p = Pattern.compile("^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"); 
     Matcher m = p.matcher(email); 
     if (!m.find()) 
     { 
      Logger.error("\"" + email + "\" appears to be an invalid email."); 
      errors.add(new ValidationError("email", "\"" + email + "\" appears to be an invalid email.")); 
     } 

     if (Subscriber.exists(email)) 
     { 
      Logger.error("\"" + email + "\" is already subscribed!"); 
      errors.add(new ValidationError("subscribed", "\"" + email + "\" is already subscribed!")); 
     } 

     Logger.warn("whoa!!!!!! " + errors.toString()); 

     //return errors.isEmpty() ? null : errors; 
     return errors; 
    } 
} 

В результате, когда я пытаюсь ввода недопустимого эл.адрес:

[error] application - "[email protected]" appears to be an invalid email. 
[warn] application - whoa!!!!!! [ValidationError(email,"[email protected]" appears to be an invalid email.,[])] 
[warn] application - Form(of=class models.Subscriber, data={}, value=None, errors={}) 
[error] application - dammit 

Почему является список ошибок пуст ?! Насколько я могу судить I am following directions. Кажется, я не могу спровоцировать ошибки.

Я использую Play 2.2.2 так this appears to be the relevant source code file. Я не сразу вижу, что я делаю неправильно.

ответ

1

Метод bindFromRequest() не мутирует объект, а возвращает новый экземпляр формы. Другими словами, ваши ошибки не привязаны ни к чему, потому что вы работаете над объектом до того, как будет применена проверка. Просто измените его следующим образом, чтобы исправить проблему.

Form<Subscriber> subscriberForm = Form.form(Subscriber.class); 
subscriberForm = subscriberForm.bindFromRequest(); 
+0

Наконец-то! Спасибо :) – wrongusername

Смежные вопросы