SSM 框架—Thymeleaf 模板引擎 Spring5 整合 Thymeleaf(XML 配置 和 注解配置)

本贴最后更新于 2141 天前,其中的信息可能已经时过境迁

1. 依赖

​ 在配置好 SSM 框架后,在 pom.xml 中添加如下依赖

<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.9.RELEASE</version> </dependency>

2. 配置

  • 配置文件方式
    ​ 在 Sping_mvc.xml 中加入如下配置,并且注释掉 jsp 的 viewResolver 或 freemarker 的配置
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="/WEB-INF/templates/"/> <property name="suffix" value=".html"/> <property name="characterEncoding" value="UTF-8"/> <property name="order" value="1"/> <property name="templateMode" value="HTML5"/> <property name="cacheable" value="false"/> </bean> <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine"> <property name="templateResolver" ref="templateResolver"/> </bean> <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine"/> <property name="characterEncoding" value="UTF-8"/> </bean>
  • 注解配置
    webConfig.java 中中加入如下配置,如果配置了 jsp 或者 freemarker 请注释掉 jsp 的 viewResolver 或 freemarker 的配置
@Configuration @EnableWebMvc @ComponentScan({"com.example.controller", "com.example.api"}) public class WebConfig implements WebMvcConfigurer { /** * 模板解析器 * * @return */ @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setPrefix(TEMPLATE_PREFIX); templateResolver.setSuffix(TEMPLATE_SUFFIX); templateResolver.setCacheable(TEMPLATE_CACHEABLE); templateResolver.setCharacterEncoding(CHARACTER_ENCODING); templateResolver.setTemplateMode(TEMPLATE_MODE); templateResolver.setOrder(TEMPLATE_ORDER); return templateResolver; } /** * 模板引擎 * * @return */ @Bean public SpringTemplateEngine springTemplateEngine(SpringResourceTemplateResolver templateResolver) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; } /** * 视图解析器 * * @return */ @Bean public ThymeleafViewResolver viewResolver(SpringTemplateEngine springTemplateEngine) { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(springTemplateEngine); viewResolver.setCharacterEncoding(CHARACTER_ENCODING); return viewResolver; } //.......其他配置请自行配置 }

由于我使用了 CONSTANTS 类里面的 static 变量,所以附上 Constants 类相关的参数

public final static String CHARACTER_ENCODING = "UTF-8"; /** * thymeleaf模板引擎参数 */ public final static String TEMPLATE_PREFIX = "/WEB-INF/templates/"; public final static String TEMPLATE_SUFFIX = ".html"; public final static Boolean TEMPLATE_CACHEABLE = false; public final static String TEMPLATE_MODE = "HTML5"; public final static Integer TEMPLATE_ORDER = 1;

此配置需要注意以下几点:

  • templateResolver 的 prefix 与 suffix 对应你的视图层的文件位置
  • templateResolver 的 characterEncoding 和 viewResolver 的都要设置成 UTF-8 中文才不会乱码。
  • templateResolver 的 cacheable 一定要在开发的时候设置成 false 不然无法看到实时的页面数据

3. 测试

  • controller:

    在 ModelMap 里面随便设置一点值

    @RequestMapping("/test") public String test(ModelMap map) { map.put("thText", "设置文本内容"); map.put("thUText", "设置文本内容"); map.put("thValue", "设置当前元素的value值"); map.put("thEach", Arrays.asList("列表", "遍历列表")); map.put("thIf", "msg is not null"); map.put("thObject", new UserEntity("sadfa","asfasfd","asfsaf","asdfasf","saf","asfd","sadf",1)); return "test"; }
  • test.html

    <!DOCTYPE html> <html lang="cn" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>TEST</h1> <h2>Thymeleaf</h2> <!--th:text 设置当前元素的文本内容,常用,优先级不高--> <p th:text="${thText}" /> <p th:utext="${thUText}" /> <!--th:value 设置当前元素的value值,常用,优先级仅比th:text高--> <input type="text" th:value="${thValue}" /> <!--th:each 遍历列表,常用,优先级很高,仅此于代码块的插入--> <!--th:each 修饰在div上,则div层重复出现,若只想p标签遍历,则修饰在p标签上--> <div th:each="message : ${thEach}"> <!-- 遍历整个div-p,不推荐--> <p th:text="${message}" /> </div> <div> <!--只遍历p,推荐使用--> <p th:text="${message}" th:each="message : ${thEach}" /> </div> <!--th:if 条件判断,类似的有th:switch,th:case,优先级仅次于th:each, 其中#strings是变量表达式的内置方法--> <p th:text="${thIf}" th:if="${not #strings.isEmpty(thIf)}"></p> <!--th:insert 把代码块插入当前div中,优先级最高,类似的有th:replace,th:include,~{} :代码块表达式 --> <div th:insert="~{grammar/common::thCommon}"></div> <!--th:object 声明变量,和*{} 一起使用--> <div th:object="${thObject}"> <p>ID: <span th:text="*{id}" /></p><!--th:text="${thObject.id}"--> <p>TH: <span th:text="*{username}" /></p><!--${thObject.thName}--> <p>DE: <span th:text="*{password}" /></p><!--${thObject.desc}--> </div> </body> </html>

    几点注意:

  • 在 html 首标签里面加上 xmlns

    <html lang="cn" xmlns:th="http://www.thymeleaf.org">
  • 同样把 head 的 meta 设置一个 charset=“UTF-8”

至此,你就可以去配置 tomcat 运行项目了。

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 385 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...