Thymeleaf 引入公共样式和 js(解决 script 重复引入问题) 时间: 2019-12-19 20:29 分类: JAVA Web ####前言 无论使用 JSP、还是Thymeleaf 或者其他模板语言,在页面中经常会用到一些公共的`css`和`js`文件,这里不说其他的模板语言如何实现,今天就说说`Thymeleaf`如何实现,以及网上那些文章有什么问题! ####实现 由于对`thymeleaf`的语法不怎么熟悉,所以首先是搜索引擎一搜,结果搜到的是千篇一律的用法,大致就是如下: - 新建`common.html` ```html Hello world! ... ``` - 新建`demo.html` ```html 需要替换的title ``` 如果没有额外的`meta`、`link`或者`script`,用`~{}`代替。 好了,上面做法错事没错,刚开始用着发现没什么问题,当我在页面的非`head`部分写了其他的`script`,这种做法也很常见吧,比如`footer`块引入一些js文件。 但是查看网页源码发现,除了`head`里面的`script`标签被引入到了公共代码块里面,整个`html`其他地方的`script`也全被加到了`head`里面,这样一来就出现了重复引入。 如果仅仅是引入`js`文件,不查看网页源代码的话还发现不了这个问题,这个问题不仅引起`js`代码的重复引用,当你想用``输出一些信息到指定位置时,发现在页面顶部也打印出来了,这也是重复引入`script`代码导致的问题。 于是查看文档,`~{}`的用法: |语法|描述| |--|--| |~{templatename}|引用整个模板文件的代码片段| |~{templatename :: selector}|selector 可以是 th:fragment 指定的名称或其他选择器。如类选择器、ID选择器等| |~{::selector}|相当于 ~{this :: selector},表示引用当前模板定义的代码片段| 首先想到的是能不能用`XPATH`语法,随便试了下,好像不行。 那么如何只是获取``中的`