zoukankan      html  css  js  c++  java
  • Spring Boot整合Thymeleaf

    项目结构

     

     

    一、创建Spring Boot项目,引入Thymeleaf依赖

      

     二、编写配置文件application.properties

    # thymeleaf页面缓存设置(默认为true),开发中方便调试应设置为false,上线稳定后应保持默认true
    spring.thymeleaf.cache=false
    # 配置国际化文件基础名
    spring.messages.basename=i18n.login
    
    server.port=8086

     

     三、创建控制类

     

    package com.uos.thymeleaf.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    import java.util.Calendar;
    
    @Controller
    public class LoginController {
        /**
         * 获取并封装当前年份跳转到登录页login.html
         */
        @GetMapping("/toLoginPage")
        public String toLoginPage(Model model){
            model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));
            return "login";
        }
    }

    LoginController

    四、创建模板页面并引入资源静态文件

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no">
        <title>用户登录界面</title>
        <link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet">
        <link th:href="@{/login/css/signin.css}" rel="stylesheet">
    </head>
    <body class="text-center">
    <!--  用户登录form表单 -->
    <form class="form-signin">
        <img class="mb-4" th:src="@{/login/img/login.jpg}" width="72" height="72">
        <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">请登录</h1>
        <input type="text" class="form-control"
               th:placeholder="#{login.username}" required="" autofocus="">
        <input type="password" class="form-control"
               th:placeholder="#{login.password}" required="">
        <div class="checkbox mb-3">
            <label>
                <input type="checkbox" value="remember-me"> [[#{login.rememberme}]]
            </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.button}">登录</button>
        <p class="mt-5 mb-3 text-muted">© <span th:text="${currentYear}">2018</span>-<span th:text="${currentYear}+1">2019</span></p>
        <a class="btn btn-sm" th:href="@{/toLoginPage(l='zh_CN')}">中文</a>
        <a class="btn btn-sm" th:href="@{/toLoginPage(l='en_US')}">English</a>
    </form>
    </body>
    </html>

    五、使用Thymeleaf配置国际化页面

    1、编写多语言国际化文件

     

    login.tip=u8BF7u767Bu5F55
    login.username=u7528u6237u540D
    login.password=u5BC6u7801
    login.rememberme=u8BB0u4F4Fu6211
    login.button=u767Bu5F55

    login.properties

    login.tip=Please sign in
    login.username=Username
    login.password=Password
    login.rememberme=Remember me
    login.button=Login

    login_en_US.properties

    2、定制区域化解析器

    package com.uos.thymeleaf.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.lang.Nullable;
    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 MyLocalResovel implements LocaleResolver {
        // 自定义区域解析方式
        @Override
        public Locale resolveLocale(HttpServletRequest httpServletRequest) {
            // 获取页面手动切换传递的语言参数l
            String l = httpServletRequest.getParameter("l");
            // 获取请求头自动传递的语言参数Accept-Language
            String header = httpServletRequest.getHeader("Accept-Language");
            Locale locale = null;
            // 如果手动切换参数不为空,就根据手动参数进行语言切换,否则默认根据请求头信息切换
            if(!StringUtils.isEmpty(l)){
                String[] split = l.split("_");
                locale=new Locale(split[0],split[1]);
            }else {
                // Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
                String[] splits = header.split(",");
                String[] split = splits[0].split("-");
                locale=new Locale(split[0],split[1]);
            }
            return locale;
        }
        @Override
        public void setLocale(HttpServletRequest httpServletRequest, @Nullable
                HttpServletResponse httpServletResponse, @Nullable Locale locale) {
        }
        // 将自定义的MyLocalResovel类重新注册为一个类型LocaleResolver的Bean组件
        @Bean
        public LocaleResolver localeResolver(){
            return new MyLocalResovel();
        }
    }

    六、运行结果

     

     

  • 相关阅读:
    【c++】重载操作符
    关于Repository模式
    UML建模系列文章总结
    windows批量创建用户
    数据库数据导入导出系列之五 C#实现动态生成Word(转)
    C#.bat文件清理工程目录
    ASP.NET用HttpListener实现文件断点续传
    LINQ to JavaScript
    依赖注入框架Autofac的简单使用
    spring boot日期转换
  • 原文地址:https://www.cnblogs.com/my-program-life/p/12042018.html
Copyright © 2011-2022 走看看