Несколько тестовых сообщений в форме для одного поля - PullRequest
0 голосов
/ 19 апреля 2020

Я получаю сообщение об ошибке при попытке ввести недопустимые данные для пользователя, так как несколько сообщений об ошибках не могут быть обработаны. Подскажите, как я могу отобразить несколько сообщений об ошибках валидации, аннотированных аннотациями Bean Validation?

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). Ошибка пароля-дубликата (попытка слияния значений Необходимо выбрать пароль и пароль. java .lang.IllegalStateException: Ошибка пароля-дубликата (попытка слияния значений Необходимо выбрать пароль и Введен-пароль-пароль). не более 16 символов.)

Класс, аннотированный сущностью:

@Entity
@Table
public class User implements UserDetails, Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank(message = "Пожалуйста, укажите имя")
    @Size(min = 2, max = 16, message = "Введено некорректное имя. Имя должно быть длиной от 2 до 16 символов.")
    private String firstname;
.....

Метод сбора ошибок:

static Map<String, String> getErrors(BindingResult bindingResult) {
        Collector<FieldError, ?, Map<String, String>> collector = Collectors.toMap(
                fieldError -> fieldError.getField() + "Error",
                FieldError::getDefaultMessage
        );
        return bindingResult.getFieldErrors().stream().collect(collector);
    }

Метод контроллера для создания действительного пользователя:

@PostMapping("/user/create")
    public String processCreateUser(
            @Valid User user,
            BindingResult bindingResult,
            Model model) {
        if (bindingResult.hasErrors()) {
            Map<String, String> errors = ControllerUtils.getErrors(bindingResult);
            model.mergeAttributes(errors);
            return "adminUserCreate";
        } else {
            adminService.createUser(user, role);
            return "redirect:/admin/users";
        }
    }

Bootstrap поле на шаблоне бесплатного маркера:

<div class="md-form">
    <input type="text" id="firstname" name="firstname"
           class="form-control ${(firstnameError??)?string('is-invalid', '')}">
    <label for="firstname">Имя</label>
    <#if firstnameError??>
        <div class="invalid-feedback">
            ${firstnameError}
        </div>
    </#if>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...