SpringBoot整合thymeleaf模板的使用

1. thymeleaf的含义

首先,先介绍一下thymeleaf的概念。
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:

  1. Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

  2. Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

  3. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

2. 引入thymeleaf

2.1 以实例介绍,首先,创建一个工程:
SpringBoot整合thymeleaf模板的使用_第1张图片
2.2 引入依赖;

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>

2.3 在resources下创建如下的HTML文件:
SpringBoot整合thymeleaf模板的使用_第2张图片
2.4 在HTML的标签中引入thymeleaf的命名空间以及获取值:

<html lang="en" xmlns:th="http://www.thymeleaf.org">	//引入命名空间
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    <p th:text="${hello}">p>
body>
html>

2.5 创建一个controller:

package cn.tx.sboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ThymeleafController {
     
    @GetMapping("hello")
    public String hello(Model model){
     
        model.addAttribute("hello","hello java");
        return "hello";
    }
}

2.6 测试
启动测试一下:
SpringBoot整合thymeleaf模板的使用_第3张图片

3. 国际化

3.1 首先在resources下创建一个i18n包:
SpringBoot整合thymeleaf模板的使用_第4张图片
3.2 由于是从根目录开始扫描配置文件,这里我们放在i18n下,所以要让配置文件被扫描到,需要设置一下:

spring:
  messages:
    basename: i18n.messages

这样就可以了。

3.3 然后先创建一个默认文件,要求必须是properties文件:
SpringBoot整合thymeleaf模板的使用_第5张图片
分别在创建中文和英语的国际化文件:
SpringBoot整合thymeleaf模板的使用_第6张图片
创建好之后,分别设置值:

默认:
tx.name=你好
zh_CN:
tx.name=你好!
en_US:
tx.name=hello!

3.3 写一下前端:

<p th:text="#{tx.name}">p>

3.4 最后测试:
SpringBoot整合thymeleaf模板的使用_第7张图片

SpringBoot整合thymeleaf模板的使用_第8张图片
这是通过设置浏览器语言来切换的方式。而如果我们想要通过点击链接请求来切换语言,就需要用到mvc里的一个对象:
国家化Locale(区域信息对象);LocalResolver()(获取区域信息对象)
那么,我们自己来写一个LocalResolver():
3.5 创建组件:

package com.atguigu.component;

import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

@Configuration
public class MyLocaleResolver implements LocaleResolver {
     
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
     
        String l = request.getParameter("l");	//获取前端对象
        Locale locale = Locale.getDefault();	//获取国际化信息默认值
        if (!StringUtils.isEmpty(l)){
     
            String[] split = l.split("_");	//将字符串分割
            locale = new Locale(split[0],split[1]);	//取字符串第一和第二个值
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
     

    }
}

3.6 在MvcConfig中添加解析:

@Bean
    public LocaleResolver localeResolver(){
     
        return new MyLocaleResolver();
    }

3.7 在HTML中链接传参数:

<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">Englisha>

3.8 测试
项目启动,点击中英文来回切换:
SpringBoot整合thymeleaf模板的使用_第9张图片
SpringBoot整合thymeleaf模板的使用_第10张图片
这样就实现了中英文手动切换了。

你可能感兴趣的:(笔记,spring,boot)