thymeleaf的layout布局子页面无法加载js,css问题

把资源引用放在子页面的标签内

<div layout:fragment="content"> 

...
...
...

     <script th:src="@{/css/main.min.css}"></script>
     <script th:src="@{/js/jquery-3.4.1.min.js}"></script>
       
     <script th:inline="javascript">
      ...

     </script>

​​​​​​​</div>
  
<think>嗯,用户想要关于Thymeleaf模板配置的最佳实践或美观设计示例。首先,我需要回忆一下Thymeleaf的基本配置和常见的最佳实践。根据之前的引用,比如引用[2]提到Spring Boot整合Thymeleaf时的默认配置,比如模板位置在resources/templates,后缀是.html。然后引用[3]提到了使用Java8Time扩展来格式化日期,还有如何在配置文件中设置额外的方言。此外,引用[4]提到在非Spring MVC环境下如何手动调用模板引擎,这可能也是相关的,但用户可能更关注的是配置和设计方面的最佳实践。 首先,用户可能需要知道如何优化Thymeleaf的配置,比如开发环境关闭缓存,这样修改模板后需要重启应用。这在引用[1]和引用[3]中都有提到,比如spring.thymeleaf.cache=false。然后,关于美观设计,可能需要包括布局模板的使用,比如使用Thymeleaf布局方言来避免重复代码,或者使用片段表达式来复用部分页面。 另外,用户可能关心如何组织模板结构,比如将公共部分如页眉、页脚、导航栏抽取成片段,这样各页面可以继承或引用这些片段,保持一致性。引用[3]中提到的日期格式化也是一个美观的考虑点,使用Java8Time扩展可以方便地在模板中处理日期,无需后端处理,这样前端展示会更整洁。 可能还需要提到静态资源的处理,比如正确引用CSSJavaScript文件,使用Thymeleaf的链接表达式@{...}来确保路径正确。同时,使用语义化的HTML5标签,结合Thymeleaf的属性,保持代码的可读性。 此外,自定义配置方面,比如修改前缀和后缀,虽然默认已经错,但如果有特殊需求可以调整。还有,消息外部化,即使用消息文件来管理文本内容,方便国际化和维护,这也是最佳实践的一部分。 最后,可能需要给出一个示例配置,展示如何整合这些最佳实践,比如在application.yml中设置缓存、启用模板、配置方言等,以及一个简单的模板示例,展示布局和片段的使用。同时,生成相关问题,帮助用户深入理解相关主题,比如如何实现国际化,如何处理动态数据等。</think>### Thymeleaf 模板配置最佳实践与美观设计示例 #### 一、核心配置优化 1. **开发环境配置** 在`application.yml`中关闭缓存并启用模板引擎,提升开发效率: ```yaml spring: thymeleaf: cache: false # 开发环境关闭缓存 enabled: true # 启用Thymeleaf prefix: classpath:/templates/ # 模板路径 suffix: .html # 文件后缀 mode: HTML5 # 使用HTML5标准 ``` 通过`@ConfigurationProperties`绑定配置,支持灵活修改[^2]。 2. **集成扩展功能** 添加`Thymeleaf Extras Java8Time`依赖,简化日期格式化: ```yaml spring: thymeleaf: additional-dialects: org.thymeleaf.extras.java8time.dialect.Java8TimeDialect ``` 模板中直接使用`<span th:text="${#temporals.format(date, 'yyyy-MM-dd')}"></span>`,避免后端逻辑冗余[^3]。 --- #### 二、美观设计与代码规范 1. **布局模板化** **定义公共布局文件** `layouts/base.html`: ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">默认标题</title> <link th:href="@{/css/main.css}" rel="stylesheet"> </head> <body> <header th:replace="~{fragments/header :: header}"></header> <main layout:fragment="content"></main> <footer th:replace="~{fragments/footer :: footer}"></footer> </body> </html> ``` **页面继承布局**: ```html <html layout:decorate="~{layouts/base}"> <head> <title>页面标题</title> </head> <body> <section layout:fragment="content"> <h1>页面内容</h1> </section> </body> </html> ``` 2. **组件模块化** **抽取可复用片段** `fragments/header.html`: ```html <header th:fragment="header"> <nav> <a th:href="@{/}">首页</a> <a th:href="@{/about}">关于</a> </nav> </header> ``` **动态引入片段**: ```html <div th:replace="~{fragments/header :: header}"></div> ``` 3. **样式与脚本管理** - **版本化静态资源**: ```html <link th:href="@{/css/app.css?v=${@environment.getProperty('app.version')}}"> ``` - **按需加载脚本**: ```html <script th:src="@{/js/dashboard.js}" defer></script> ``` --- #### 三、高级实践 1. **消息外部化** 在`messages.properties`中定义文本: ```properties welcome.message=欢迎使用系统,当前时间:<span th:text="${#temporals.format(#dates.createNow(), 'yyyy-MM-dd HH:mm')}"></span> ``` 模板中引用: ```html <h1 th:text="#{welcome.message}"></h1> ``` 2. **条件渲染优化** ```html <div th:classappend="${user.isAdmin} ? 'admin-badge' : ''" th:if="${user.active}"> [[${user.name}]] </div> ``` --- #### 四、完整配置示例 ```yaml # application.yml spring: thymeleaf: cache: false prefix: classpath:/templates/ suffix: .html additional-dialects: - org.thymeleaf.extras.java8time.dialect.Java8TimeDialect check-template-location: true enabled: true mode: HTML encoding: UTF-8 servlet: content-type: text/html ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值