在 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 验证结果的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf 搜索模板引擎

springboot:Java模板引擎Thymeleaf介绍

thymeleaf使用详解

Spring Boot系列——模板引擎thymeleaf

SpringBoot新一代Java模板引擎Thymeleaf

Spring Boot入门系列六( SpringBoot 整合thymeleaf)