• spring boot:thymeleaf给fragment传递参数的方法(spring boot 2.3.3)


    一,thymeleaf如何给fragment传递参数?

    1,如果是全局的参数,可以用interceptor中传递

      非全局参数,可以从controller中传递

    2,引用片断时也可以传递参数

      

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

    说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,演示项目的相关信息

    1,项目地址:

    https://github.com/liuhongdi/fragmentparam

    2,项目功能:

            用一个页面header的例子,

            演示了给fragment传递参数

    3,项目结构,如图:

    三,配置文件说明

    1,pom.xml

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--thymeleaf begin-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>

    2,application.properties

    #error
    server.error.include-stacktrace=always
    #error
    #logging.level.org.springframework.web=trace
    logging.level.org.springframework.web=debug
    #thymeleaf
    spring.thymeleaf.cache=false
    spring.thymeleaf.encoding=UTF-8
    spring.thymeleaf.mode=HTML
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html

    四,java代码说明

    1,HomeController.java

    @RequestMapping("/home")
    @Controller
    public class HomeController {
    
        //传递参数给模板
        @GetMapping("/home")
        public String index(ModelMap modelMap) {
            modelMap.addAttribute("curTitle","首页");
            modelMap.addAttribute("jsversion","20200915121212");
            return "home/home";
        }
    }

    2,DefaultMvcConfig.java

    @Configuration
    @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
    public class DefaultMvcConfig implements WebMvcConfigurer {
    
        @Resource
        private WebInterceptor webInterceptor;
    
        //添加Interceptor
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(webInterceptor)
                    .addPathPatterns("/home/**","/goods/**","/login/login","/order/**","/set/**","/admin/**","/merchant/**")
                    .excludePathPatterns("/html/*","/js/*");
        }
    }

    配置interceptor

    3,WebInterceptor.java

    @Component
    public class WebInterceptor extends HandlerInterceptorAdapter {
        //如果view不为空,把登录信息传递给模板
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
            if (modelAndView != null) {
                ModelMap modelMap = modelAndView.getModelMap();
                modelMap.addAttribute("GlobalTitle","商品管理系统");
            }
        }
    }

    传递参数给模板

    4,header.html

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:th="http://www.thymeleaf.org">
    <head th:fragment="common_header(jsversion,csslink)">
        <title>[[${curTitle}]]-[[${GlobalTitle}]]</title>
        <!--全局通用框架样式 begin-->
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta charset="utf-8" />
        <meta name="description" content="" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
        <script type="text/javascript" language="JavaScript" th:src="@{/js/utils.js(${jsversion})}" ></script>
        <th:block th:replace="${csslink}" />
    </head>

    说明:两个参数:curTitle,GlobalTitle是java直接传递到模板的

             另两个参数: jsversion,csslink是通过fragment传递的参数

    5,home.html

    <!DOCTYPE html>
    <html lang="en">
    <head th:replace="common/header :: common_header(${jsversion},~{::link})">
        <link rel="stylesheet" href="/css/home.css" />
        <link rel="stylesheet" href="/css/home2.css" />
    </head>
    <body>
    <div style="100%;height:30px;background:#ffffff;font-size: 16px;" ></div>
    <div id="content" style="1040px;">
        <div style="790px;float:left;margin-left:30px;">
            <!--main begin-->
            this is home
            <!--main   end-->
        </div>
    </div>
    </body>
    </html>

    说明:在引用fragment时,jsversion这个参数,我们直接取java传递的值,

              ::link则表示取当前元素下面的link元素,两个都会传递给fragment

    五,测试效果

    1,访问:

    http://127.0.0.1:8080/home/home

    返回:

    可以看到title中包含的两个参数已起作用

    查看源码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>首页-商品管理系统</title>
        <!--全局通用框架样式 begin-->
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta charset="utf-8" />
        <meta name="description" content="" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
        <script type="text/javascript" language="JavaScript" src="/js/utils.js?20200915121212" ></script>
        <link rel="stylesheet" href="/css/home.css" /><link rel="stylesheet" href="/css/home2.css" />
    </head>
    <body>
    <div style="100%;height:30px;background:#ffffff;font-size: 16px;" ></div>
    <div id="content" style="1040px;">
        <div style="790px;float:left;margin-left:30px;">
            <!--main begin-->
            this is home
            <!--main   end-->
        </div>
    </div>
    </body>
    </html>

    可以看到:jsversion的传递生效,

    两个css文件的传递也生效

    六,查看spring boot版本

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.3.3.RELEASE)
  • 相关阅读:
    idea中maven报错:无效的目标发行版: 1.8
    IDEA将web项目打成war包
    Java 错误: 找不到或无法加载主类,问题集合
    阿里云centos7使用yum安装mysql的正确姿势
    一看你就懂,超详细java中的ClassLoader详解
    Linux下,用命令进行 日志分割、日志合并
    IDEA 类图功能使用方法
    通用base.css —— 《编写高质量代码 web前端开发修炼之道》
    easyui datagrid去掉全选按钮
    element+vue:el-table-column里面的内容只显示一行
  • 原文地址:https://www.cnblogs.com/architectforest/p/13678862.html
Copyright © 2020-2023  润新知