视图技术Thymeleaf-SpringBoot(4)

1.什么是Thymeleaf

  Spring Boot 主要支持Thymeleaf、FreenrtarkerMustache、Groovy Templates 等模板引擎。

目前成都创新互联公司已为上千家的企业提供了网站建设、域名、网页空间、网站托管、服务器托管、企业网站设计、沙坡头网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

  Thymeleaf语法并不会破坏文档的结构,所以Thymeleaf模板依然是有效的HTML文档。模 板还可以被用作工作原型,Thymeleaf会在运行期内替换掉静态值。它的模板文件能直接在浏览器 中打开并正确显示页面,而不需要启动整个Web应用程序。

1.1 为什么需要模板引擎

  Thymeleaf解决了前端开发人员要和后端开发人员配置一样环境的尴尬和低效。它通过属性进 行模板渲染,不需要引入不能被浏览器识别的新的标签。页面直接作为HTML文件,用浏览器打开页面即可看到最终的效果,可以降低前后端人员的沟通成本。

1.2 使用Thymeleaf

要使用Thymeleaf,首先需要引入依赖。直接在pom.xml文件中加入以下依赖即可。


    org.springframework.boot
    spring-boot-starter-thymeleaf
    2.0.7.RELEASE

在模板文件中加入解析,在html文件中加入命名空间即可。

1.3 配置视图解析器

  Spring Boot默认的页面映射路径(即模板文件存放的位置)为 "classpath: /templates/*.html" 。 静态文件路径为 "classpath:/static/",其中可以存放层叠样式表CSS( Cascading Style Sheets )、 JS (JavaScript)等模板共用的静态文件。在application.yml文件中,可以配置Thymeleaf模板解析器属性

spring:
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    servlet:
      content-type: text/html
    cache: false

spring.thymeleaf.mode:代表 Thymeleaf 模式。

spring.thymeleaf.encodmg:代表 Thymeleaf 编码格式。

thymeleaf.content-type:代表文档类型。

thymeleaf.cache:代表是否启用 Thymeleaf 的缓存。

2.基础用法

2.1 引用命名空间

  要使用Thymeleaf,则需要先要加入依赖,然后在模板文件中引用命名空间,如下:

  之后,会进行Thymeleaf模板标签的渲染。如果用Spring Security作为安全认证,且需要显示登录用户的信息,则可以先在视图中加入额外的thymeleaf-extras-springsecurity依赖


    org.thymeleaf.extras
    thymeleaf-extras-springsecurity3
    2.1.0.RELEASE

  然后 在模板文件中加入thymeleaf-extras-springsecurity命名空间,具体见以下代码:



管理员
普通用户

这里特别要注意查看 spring-boot—starter-thymeleaf 依赖和 thymeleaf-extras- springsecurity依赖的版本是否兼容。如果不兼容,则无法调用登录用户的信息。

2.2 常用th标签

(1)th:text

>name

它用于显示控制器传入的name值。

如果name不存在,要显示默认值,则使用以下代码:

(2)th:object

它用于接收后台传过来的对象,如以下代码:

th:object="${user}"

(3)th:action

它用来指定表单提交地址。

(4)th:value

它用对象将id的值替换为value的属性。

(5)th:field

它用来绑定后台对象和表单数据。Thymeleaf里的"th:field"等同于"th:name"和"th: valued"其具体使用方法见以下代码:


2.3 Thymeleaf 中的 URL 写法

Thymeleaf是通过语法@{…}来处理URL的,需要使用"th:href"和"th:src"等属性,如以下代码

绝对路径
相对路径
默认访问static下的css文件夹

2.4用Thymeleaf进行条件求值

Thymeleaf通过 "th:if" 和 "th:unless" 属性迸行条件判断。在下面的例子中,标签只有 在 "th:if" 中的条件成立时才显示。

Login

"th:unless" 与 "th:if" 恰好相反,只有当表达式中的条件不成立时才显示其内容。在下方代码中,如果用户session为空,则不显示登录(login )链接。

Login

2.5 Switch

管理员

vip会员

普通会员

上述代码的意思是:如果用户角色(role)是admin,则显示“管理员”;如果用户角色是vip, 则显示"vip会员”;如果都不是,则显示“普通会员”,即使用“*”表示默认情况。

2.6 Thymeleaf中的字符串替换

有时需要对文字中的某一处地方进行替换,可以通过字符串拼接操作完成,如以下代码:

或者:

上面的第2种形式限制比较多,|...|中只能包含变量表达式${...},不能包含其他常量、条件表达式等。

2.7 Thymeleaf的运算符

1.算数运算符。

    如果要在模板中进行算数运算,则可以用下面的写法。以下代码表示求加和取余运算。

  
  

2.条件运算符

    下方代码演示了 if判断,表示:如果从控制器传来的role值等于“admin”,则显示 "欢迎您, 管理员";如果role值等于 "vip",则显示 "欢迎您,vip会员"

欢迎您,管理员
欢迎您,vip

eq是判断表达式,代表等于。其他的判断表达式如下。

gt:大于。

ge:大于或等于。

eq:等于。

It:小于。

   le:小于或等于。

ne:不等于。

3.判断空值

可以使用if来判断值是否为空,如以下代码:

不为空
为空

2.8 Thymeleaf公用对象

Thymeleaf还提供了一系列公用(utility)对象,可以通过"#"直接访问,如以下用法

格式化时间:

格式化时间

判断是不是空字符串:

是否包含(分大小写):

包含

3. 处理循环遍历

3.1 遍历对象(object)

在开发过程中,经常会遇到遍历对象的情况,可以通过 th:each="Object:$(Objects}"标签来处理。以下代码是遍历从控制器中传来的书籍对象。

  • 姓名
  • 密码
  • 3.2 遍历分页(page)

    分页也是极为常见的开发需求。在Thymeleaf中,可以通过 th:each="item : ${page.content}"标签来处理page对象。如以下代码

  • id
  • title
  • 3.3 遍历列表(list)

    要处理list,也使用 th:each="item:${list}"标签来实现。

  • id
  • title
  • 3.4 遍历数组(array)

    使用 th:each="item:${arrays}"标签来遍历数组,如以下代码:

  • id
  • 3.5 遍历集合(map)

    集合通过 th:text="${item.key}"显示集合的 key,通过 th:text="${item.value}" 显示集合的值,如以下代码:

  • 4. 处理公共代码块

      一个网页的结构基本可以分为上(header )、中(body )、下(footer)三个部分。在一般情况 下,header和footer的信息在各个页面都会重复显示,如果每个页面都复制一份代码则太麻烦了。设计Thymeleaf的团队也考虑到代码复用的问题,提供了 "th:fragment" "th:include" 和 "th:replace"标签用来处理重复的代码块。具体用法如下。

    4.1 用fragment标记重复代码块

    可以通过"th:fragment="header" 标签来标记重复代码块,如以下代码

    
    

    4.2 调用重复代码块

    在需要调用的地方,用"th:include"或"th:replace"标签根据fragment值来调用,如以下代码:

    其中~{html文件名:: 通过fragment起的别名}

    "th:include"和 "th:replace" 标签都可以调用公共代码。它们的区别如下。

    • th:replace:替换当前标签为模板中的标签。比如上面用replace标签,则代码替换为:

      公共header

    • th:include:只加载模板的内容。比如上面用include标签,则代码替换为:

      公共footer

    5. 处理分页

    在MVC开发过程中,分页也是常用的功能。Thymeleaf可以处理由控制器传入的分页参数。

    1.用控制器传入page对象

    Pageable pageable = PageRequest.of(start,limit,sort);
    Page page = articleRepository.findAll(pageable);
    ModelAndView modelAndView = new ModelAndView("/index");
    modelAndView.addObject("page",page);
    return modelAndView;

    2.用Thymeleaf接收page对象并处理

    6. 验证和提示错误消息

    大多数表单信息都需要逬行字符串的验证,以及提供错误消息反馈。Thymeleaf提供了几种提示错误信息的方法。

    6.1字段错误信息提示

    email: 邮箱错误

    6.2 提示所有错误

    • 邮箱错误

    文章标题:视图技术Thymeleaf-SpringBoot(4)
    浏览路径:http://ybzwz.com/article/dsojspp.html