Ошибка отображения в Play Framework 2

Прежде всего, я хочу сказать, что я считаю, что документация Play для 2.0 действительно, очень плохо.

Я ищу способ разместить ошибку проверки под HTML, чтобы выбрать, как воспроизведение сделало бы это для автоматически созданного окна ввода.

Я попытался скопировать структуру полученного HTML-кода в поле ввода Play, но я уверен, что мне не хватает строки ifError- Scala в моем HTML-коде.

К сожалению, невозможно найти версию Play 2.0 для тем, уже охваченных игрой Play < 2.0. Таким образом, вы приземлитесь на старую, а не рабочую документацию, если вы ищете решение в документах. Очень расстраивает!

Ответ 1

Я использую этот код для отображения глобального окна предупреждения о загрузке с формой:

@if(form.hasErrors) {
    <div class="alert alert-error">
        <a class="close" data-dismiss="alert">x</a>
        @if(form.errors.size() > 0) {
            @for((key, value) <- form.errors) {
                @key.toString() : 
                    @for(err <- value) {
                        @err.message().toString()
                    }
            }
        } else {No error returned.}
    </div>
}

Выход для пары ключ-значение ошибки формы - это окно с бутстрапом с @key.toString() : @value.message.toString.

Если вы хотите отобразить ошибку на полевом уровне вместо этого, вы бы хотели немного изменить ее с помощью другого условного оператора для значения map form.errors, чтобы он запускался только для определенного поля. Я не тестировал это, но он бы сделал что-то вроде:

@if(form.hasErrors) {
    @if(form.errors.size() > 0) {
        @for((key, value) <- form.errors) {
            @for(err <- value) {
                @if(err.contains("YourSelectFieldName")) {
                    @err.message().toString()
                }
            }
        }
    }
}

Ответ 2

Ответ от 2manyprojects работает очень хорошо, но вы можете сделать то же самое в контроллере. Все зависит от ваших предпочтений и стиля.

public static Result save() {
        Form<form> boundForm = form.bindFromRequest();
        if (boundForm.hasErrors()) {
            String errorMsg = "";
            java.util.Map<String, List<play.data.validation.ValidationError>> errorsAll = boundForm.errors();
            for (String field : errorsAll.keySet()) {
                errorMsg += field + " ";
                for (ValidationError error : errorsAll.get(field)) {
                    errorMsg += error.message() + ", ";
                }
            }
            flash("error", "Please correct the following errors: " + errorMsg);
            return badRequest(detail.render(boundForm));
        }