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); & ...
随机推荐
- html基础:DOM操作
DOM(Document Object Model 文档对象模型) 一个web页面被封装成一个dom对象,通过dom中的js对页面的标签进行操作 一.获取对象 浏览器页面上右键--检查--consol ...
- 登录SQL Server服务器时的服务器名称
在本地访问Microsoft SQL Server 2008服务器时,首先就是要填写正确的服务器名称.经测试,该名称可以有多种写法,具体如下: 写法一: X\sqlexpress(X即计算机名) 写法 ...
- PHP程序十点未来的建议
1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 ...
- C语言的运算符
操作数 :参与运算的变量 表达式:有意义有结果的语句 运算符的分类:1.按照功能运算符划分:算术运算符 关系运算符 逻辑运算符 位运算 2.按照参与运算的操作数个数划分:单目运算(只有一个操作数) 双 ...
- 微信小程序入门到精通
微信小程序账号与工具 在线文档:https://mp.weixin.qq.com/debug/wxadoc/dev/ 小程序开发者账号注册 微信公众平台:https://mp.weixin.qq.co ...
- idea配置springboot项目记录
配置文件application.properties server.port=80 server.servlet.context-path=/bookManage spring.mvc.static- ...
- python爬取千库网
url:https://i588ku.com/beijing/0-0-default-0-8-0-0-0-0-1/ 有水印 但是点进去就没了 这里先来测试是否有反爬虫 import requests ...
- ServletContex对象学习
问题: 不同的用户使用相同的数据 解决: ServletContext对象 特点: 服务器创建 用户共享 作用域: 整个项目内 生命周期: 服务器启动到服务器关闭 使用: 1.获取SercvletCo ...
- DC 1-3 靶机渗透
DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...
- 微服务实战系列(七)-网关springcloud gateway
1. 场景描述 springcloud刚推出的时候用的是netflix全家桶,路由用的zuul,但是据说zull1.0在大数据量访问的时候存在较大性能问题,2.0就没集成到springcloud中了, ...