【问题标题】:Show Springboot validation results in Thymeleaf template在 Thymeleaf 模板中显示 Springboot 验证结果
【发布时间】: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”语句,以便检查字段中是否有任何错误。

谢谢。

【问题讨论】:

    标签: spring-boot spring-mvc thymeleaf


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2021-03-03
      • 2021-11-05
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多