在 Thymeleaf 模板中显示 Springboot 验证结果
Posted
技术标签:
【中文标题】在 Thymeleaf 模板中显示 Springboot 验证结果【英文标题】:Show Springboot validation results in Thymeleaf template 【发布时间】:2021-10-08 02:41:03 【问题描述】:我开始使用 Springboot 并且无法将验证结果(错误)传播回百里香模板。我有一个典型的设置:@Entity 对象、@Service 和@Repository。这是我的控制器和索引模板(及其形式)的部分。 UserVital、UserBlood 等是使用 hibernate 映射到 DB 表的数据对象。希望这些信息足以让成员们为我指明正确的方向。
数据对象
@Entity
@Table(name = ".....")
public class UserVital
@NotNull(message = "Height (Feet) cannot be null")
@Range(min = 0, max = 15, message = "Height (Feet) must be greater than 0")
@Column(name = "feet", nullable = false)
private int heightInFeet;
.............
控制器
@GetMapping("/")
public String getUsers(Model model)
UserVital vital = new UserVital();
UserGrithMeasurements grith = new UserGrithMeasurements();
UserBloodChemistry blood = new UserBloodChemistry();
List<Category> categories = categoryService.getAllCategories();
model.addAttribute("categories", categories.get(0));
model.addAttribute("vital", vital);
model.addAttribute("grith", grith);
model.addAttribute("blood", blood);
return "index";
@PostMapping("/add")
public String addData(@Valid UserVital vital, BindingResult vitalValidationResult,
@Valid UserGrithMeasurements grith, BindingResult grithValidationResult, @Valid UserBloodChemistry blood,
BindingResult bloodValidationResult, Model model)
if (vitalValidationResult.hasErrors() || grithValidationResult.hasErrors()
|| bloodValidationResult.hasErrors())
return "index";
else
model.addAttribute("successMsg", "Details saved successfully!!");
return "index";
百里香形式
<form class="tab-content" method="POST" th:action="@/add">
<div class="form-group row">
<label for="height" class="col-sm-2 control-label" th:text="#height"></label>
<div class="col-sm-2">
<input type="number" class="form-control" id="feet" th:attr="placeholder=#feet"
th:field="$vital.heightInFeet">
</div>
<div class="form-group col-sm-12">
<label for="neck" class="col-sm-2 control-label" th:text="#neck"></label>
<div class="col-sm-2">
<input type="number" class="form-control" id="systolic" th:attr="placeholder=#inches"
th:field="$grith.neck">
<div class="col-sm-2">
<input type="number" class="form-control" id="ldl" th:field="$blood.ldl">
.....
</form>
问题:如您所见,我有多个 BindingResult 对象。每个 BindingResult 对象保存各自数据对象的验证结果(vitalValidationResult 保存 UserVital 对象生命体的验证结果等)。现在,我如何在模板中编写“th:if”语句,以便检查字段中是否有任何错误。
谢谢。
【问题讨论】:
【参考方案1】:我已经解决了这个问题,方法是将所需的表单字段封装在一个 div 中,然后将“th:object=$objectName”放在 div 中。
<form >
<div class="tab-pane active text-center" id="tab_1_1" th:object=$vital>
<div class="tab-pane active text-center" id="tab_1_2" th:object=$grith>
</form>
【讨论】:
以上是关于在 Thymeleaf 模板中显示 Springboot 验证结果的主要内容,如果未能解决你的问题,请参考以下文章
springboot:Java模板引擎Thymeleaf介绍