Я только начал с Play и пытаюсь получить некоторые пользовательские ограничения для моей модели.
Я обнаружил, что это работает
@Constraints.Required
@Constraints.MaxLength(15)
@Constraints.MinLength(4)
@Constraints.Pattern(value = "^\\w\\s$")
public String username;
Но теперь я хочу добавить пользовательское ограничение с собственной реализацией (для проверки уникальности). Поэтому я попробовал это (оно было автоматически заполнено моей IDE, поэтому оно существует)
@Constraints.ValidateWith(Account.UniqueValidator.class)
public String username;
Я где-то нашел (прошел много ссылок, поэтому больше не могу найти, что класс должен расширять Constraints.Validator
Так я и сделал.
private class UniqueValidator extends Constraints.Validator<String>
{
@Override
public boolean isValid(String s) {
return Account.find.where().eq("username", s).findRowCount() == 0;
}
@Override
public F.Tuple<String, Object[]> getErrorMessageKey() {
return null;
}
}
Однако я не знаю, что возвращать в значении getErrorMessageKey, это обязательный метод для реализации. Я посмотрел в источнике игры и нашел «что-то», похожее на это. А именно валидатор NotEmpty.
Однако, когда вы посмотрите туда, вы увидите, что он возвращает Tuple, а не F.Tuple. Когда я меняю это в своем коде, он жалуется, что это не F.Tuple.
Пытался вернуться
return Tuple("error.invalid", new Object[] {});
Как это сделано в приведенной выше ссылке на валидатор NotEmpty. Но затем он говорит, что ему нужно «новое» перед Tuple, но это дает мне класс с кучей необходимых методов для реализации. Так что я думаю, что это не совсем выход.
Когда я просматриваю документацию по игре здесь, мне нужно использовать аннотацию @CheckWith , но когда я выбираю это, он говорит, что не может найти аннотацию @CheckWith.
Я потерян. :-)