Spring Validation

JSR 380

其实就是Bean Validation 2.0,这个就是Bean验证的规范,这里的Bean就是实例化后的POJO类,依赖库如下:

<dependency>
  <groupId>jakarta.validation</groupId>
  <artifactId>jakarta.validation-api</artifactId>
  <version>2.0.1</version>
</dependency>

Validation注解

这些注解可以直接设置在Bean属性上

  • @NotNull

不允许为null对象

  • @AssertTrue

是否为true

  • @Size

约定字符串的长度

  • @Max
  • @Min

字符串最大最小的长度

  • @Email

是否是邮箱格式

  • @NotEmpty

不允许为null或者为空,可以用于判断字符串,集合

  • @NotBlank

不允许为null和空格

package com.bookstore.model;

import javax.validation.constraints.*;

public class User {

    @NotEmpty(message = "名称不能为 null")
    private String name;

    @Min(value = 18, message = "你的年龄必须大于等于18岁")
    @Max(value = 150, message = "你的年龄必须小于等于150岁")
    private int age;

    @NotEmpty(message = "邮箱必须输入")
    @Email(message = "邮箱不正确")
    private String email;
 
    // standard setters and getters 
}

执行校检

package com.bookstore.control;

import com.bookstore.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;

@Controller
public class UserControl {

    @GetMapping("/user/add.html")
    public String addUser() {
        return "user/addUser";
    }

    @PostMapping("/user/save")
    public String saveUser(@Valid User user, BindingResult errors) {
        if (errors.hasErrors()) {
            // 如果校验不通过,返回用户编辑页面
            return "user/addUser";
        }
        // 校验通过,返回成功页面
        return "user/addUserSuccess";
    }

}

第一个参数user那添加了参数注解@Valid,然后第二个参数errors类型为BindingResult(hasErrors方法可以检验是否成功)

  1. th:object
    为了使表单验证状态生效,需要在标签里增加一个th:object="${对象}"属性,这样就不用对象.xxx,可以直接操作xxx
  2. th:classappend
    这个语法支持动态的管理样式:
<div th:classappend="${#fields.hasErrors('name')} ? 'error' : ''">
</div>

如果条件成立则上面代码会生成:

<div class="error">
</div>

${#fields.hasErrors('key')}这个语法是专门为验证场景提供的,key就是属性的名称

  1. th:errors
    如果要显示错误信息,可以使用th:errors="*{变量}",这个会主动取出错误
<p th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></p>
  1. th:filed
    可以显示上一次输入的内容:
<div th:classappend="${#fields.hasErrors('age')} ? 'error' : ''">
  <label>年龄:</label>
  <input type="text" th:field="*{age}" />
  <p th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></p>
</div>

Thymeleaf 布局

一般使用th:include + th:replace方案来完成局部的开发

  1. th:include="::content"
    ::content指的是选择器,这个选择器指的是就是加载当前页面的th:fragment的值.当前页面渲染的时候,布局会合并content这个fragment内容一起渲染.
  2. th:replace=“layout”
    指定了布局的名称,声明后页面会被替换成layout的内容,这个layout指的是templates/layout.html
  3. th:fragment=“content”
<div th:fragment="content">
</div>

fragment是片段的意思,当页面渲染时候,可以通过选择器指定使用这个片段,在上面的th:include="::content"指的就是这个值.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-irony-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值