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="width:100%;height:30px;background:#ffffff;font-size: 16px;" ></div>
<div id="content" style="width:1040px;">
<div style="width: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="width:100%;height:30px;background:#ffffff;font-size: 16px;" ></div>
<div id="content" style="width:1040px;">
<div style="width: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)
spring boot:thymeleaf给fragment传递参数的方法(spring boot 2.3.3)的更多相关文章
- 如何向一个Fragment传递参数---setArguments方法的介绍
在我们平常开发中经常会用到Fragment,当我们使用Fragment时一般是通过new Fragment的构造方法来实现,如果我问你怎么向一个Fragment传递参数,你是不是会首先想到通过构造方法 ...
- springMVC controller间跳转 重定向 传递参数的方法
springMVC controller间跳转 重定向 传递参数的方法 spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参 ...
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- C++向main函数传递参数的方法(实例已上传至github)
通常情况下,我们定义的main函数都只有空形参列表: int main(){...} 然而,有时我们确实需要给mian传递实参,一种常见的情况是用户设置一组选项来确定函数所要执行的操作.例如,假定ma ...
- jsp中四种传递参数的方法
jsp中四种传递参数的方法如下: 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="i ...
- Jsp传递参数的方法
今天老师讲了jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用! 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超 ...
- Javascript 定时器调用传递参数的方法
文章来源: https://m.jb51.net/article/20880.htm 备注:先记下,以后整理: Javascript 定时器调用传递参数的方法,需要的朋友可以参考下. 无论是wind ...
- JSP页面之间传递参数的方法有哪些?
JSP页面之间传递参数的方法有哪些? 解答: 1)request 2)session 3)application 4)提交表单 5)超链接
- php cli传递参数的方法
php cli传递参数的方法 <pre>$options = "f:g:"; $opts = getopt( $options ); print_r($opts); & ...
随机推荐
- Python 面试题 字符串 删除多少个字符使得出现做多的字符数量大于等于字符串长度的一半.
str1 = input() num = {} for i in set(str1): num[i]=str1.count(i) max_value = max(num.values()) n=abs ...
- 图解 Await 和 Async
原文链接:Await and Async Explained with Diagrams and Examples 文章目录 简介 Promise 问题:组合 Promise Async 函数 Awa ...
- IAR错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xd more bytes needed. The problem occurred while processing the segment 的解决办法
IAR for 8051 IDE version 9.10.1编译阿莫单片机的cc2541程序osal第一节教程出现错误如下 出错的愿意是iar设置错误.所以需修改IAR的设置. 解决办法如下: 即可 ...
- C#开发PACS医学影像处理系统(六):加载Dicom影像
对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3 ...
- zabbix邮件报警设置(加密)
邮件设置如下 端口号选择465
- zabbix-自动发现并监控
创建自动发现规则 添加 ip 范围 客户端安装zabbix-agent [root@node1 ~]# docker load -i zabbix_agent.tar.gz 23f7bd114e4a: ...
- MySql-8.0.x免安装版下载与配置,Navicat打开数据库链接报错1251的解决办法
若你以前卸载过mysql,小白极大可能没有卸载和删除干净残留,没有卸载干净就肯定重装不成功,可参考https://www.cnblogs.com/Luoters/p/11869032.html 参考与 ...
- 数据库图形表Navicat Premium
1.什么是数据库? 存储数据,为了方便查询和使用 web时代使用最广泛的关系型数据库 2.历史: 瑞典公司开发,卖给SUN,SUN又卖给ORACLE 开源,免费,支持多平台 3.数据库图形表Navic ...
- @RequestParam,@RequestBody,@ResponseBody,@PathVariable注解的一点小总结
一.前提知识: http协议规定一次请求对应一次响应,根据不同的请求方式,请求的内容会有所不同: 发送GET请求是没有请求体的,参数会直接拼接保留到url后一并发送: 而POST请求是带有请求体的,带 ...
- JavaScript的this到底代表谁?(this指向哪里?)
在很多编程语言中都有this这个特殊关键字的存在,比如Java中的this,还有本文要说到的JavaScript中的this.那么,JavaScript中this究竟有什么特性和用法呢?它又是如何定义 ...