【问题标题】:Spring WebFlux and Thymeleaf form validation messagesSpring WebFlux 和 Thymeleaf 表单验证消息
【发布时间】:2020-09-18 23:07:26
【问题描述】:

我正在尝试学习 webflux 和 thymeleaf,但我几乎一开始就卡住了。 我能够从表单中获取数据并对其进行验证,但我无法在 thymeleaf 中使用 ${#fields(...)} 获取错误消息。

您可以在下面找到我目前拥有的:

表格:

     <form class="need-validation" th:action="@{/group/new}" th:object="${group}" method="post">
        <ul th:if="${#fields.hasErrors('name')}">
            <li th:each="err : ${#fields.errors('name')}" th:text="${err}">Input is incorrect</li>
        </ul>
        <div class="form-group row">
            <label for="name" class="col-sm-2 col-form-label" th:text="#{groups.group.name}"></label>
            <div class="col-sm-10">
                <input type="text" class="form-control" id="name" name="name" th:value="*{name}" >
            </div>
        </div>
     </form>

以及处理表单的代码:

public Mono<ServerResponse> createGroup(ServerRequest serverRequest) {
    return serverRequest.formData()
            .map(this::parseGroupData)
            .flatMap(group -> {
                Errors errors = validateGroup(group);
                if (errors.hasErrors()) {
                    Map<String, Object> model = new HashMap<>();
                    model.put("group", group);
                    model.put("errors", errors.getAllErrors());
                    //model.put("fields", errors);
                    return ServerResponse.badRequest().render("/groups/group-create", model);
                }

                return ServerResponse.ok().bodyValue(group);
            });
}

private FormGroup parseGroupData(MultiValueMap<String, String> multiValueMap) {
    Map<String, String> map = multiValueMap.toSingleValueMap();
    FormGroup formGroup = new FormGroup();

    formGroup.setName(map.get("name"));

    return formGroup;
}

private Errors validateGroup(FormGroup group) {
    Errors errors = new BeanPropertyBindingResult(group, "group");
    groupValidator.validate(group, errors);

    return errors;
}

验证看起来可以正常工作,因为当我插入不正确的数据时,“名称”字段上存在错误。 如何使用#fields 对象显示错误? 或者在那种情况下,我必须编写自己的解决方案?

【问题讨论】:

    标签: thymeleaf spring-webflux


    【解决方案1】:

    你可以试试这个键的错误,它对我有用。

    if (errors.hasErrors()) {
        model.addAttribute(BindingResult.class.getName() + ".group", errors);
    }
    

    'group' 是 thymeleaf 对象名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2016-02-20
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多