【发布时间】: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 对象显示错误? 或者在那种情况下,我必须编写自己的解决方案?
【问题讨论】: