java - thymeleaf (th :replace) not working

标签 java spring thymeleaf

你好,我是 Thymeleaf 的新手,遇到了一个可能微不足道的问题,但 thymeleaf 的行为并不像它应该的那样。只需一点帮助,我们将不胜感激

我不使用 spring boot 来学习。此外,我对 Spring 也很陌生。可能会遗漏一两件事。

我有这样简单的 index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Index 2</title>
</head>
<body>
    <div th:replace="~{fragments/fragment1 :: fr1}"></div>
</body>
</html>

和fragment1.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div th:fragment="fr1"><h1>HERE IS FRAGMENTS 1</h1></div>
</body>
</html>

据说它确实解析了模板,但结果根本没有改变。

这是我从浏览器页面源码中得到的

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Index 2</title>
</head>
<body>
    <div th:replace="~{fragments/fragment1 :: fr1}"></div>
</body>
</html>

是的,它与原始 index.html 完全相同。

所以我想这可能与配置有关,但对我来说看起来不错。在我的另一个学习项目中,它在完全相同的配置下运行良好。

这里是配置

/* package and imports */

@Configuration
@EnableWebMvc
@ComponentScan("com.eshop")
public class WebConfig extends WebMvcConfigurerAdapter {

    private static final String UTF8 = "UTF-8";
    private static final String VIEWS = "/WEB-INF/templates/";

    private static final String RESOURCES_LOCATION = "/resources/";
    private static final String RESOURCES_HANDLER = RESOURCES_LOCATION + "**";


    //Thymeleaf Configuration
    @Bean
    public ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix(VIEWS);
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCacheable(false);
        return resolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setDialect(new SpringSecurityDialect());
        return templateEngine;
    }
    @Bean
    public ViewResolver viewResolver(){
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding(UTF8);
        return viewResolver;
    }

    // tells DispatcherServlet to give static resources and not handle the resources itself
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


    // handle various resources like javascript and css
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler( RESOURCES_HANDLER ).addResourceLocations( RESOURCES_LOCATION );
    }
}

pom.xml

<!-- thymeleaf -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

这是项目树

webapp
|__resources
|__WEB-INF
   |__i18n
   |__templates
      |__fragments
         |__fragment1.html
      |__index.html

我在这里遗漏了什么,我该如何解决?

最佳答案

尝试在没有 ~{} 的情况下调用 th:replace

<div th:replace="fragments/fragment1 :: fr1"></div>

还要确保您有单独的 html 文件,名为 fragment1.html

Layouts教程应该可以帮助您入门。

关于java - thymeleaf (th :replace) not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40361247/

相关文章:

java - 使用 ImageView 和底部的自定义布局构建 CollapsingToolbar

java - SpringBoot - 完全停用安全性以启用摘要转发

java - 负载均衡服务器,我该如何实现?

java - Android 生物识别授权 key 永久失效异常

java - Gradle总是从任何任务执行println

java - 我应该使用 Spring 任务计划程序通过 @Async 注解在指定时间执行任务吗?

spring - 如何使用Spring Boot JMS收听主题

java - 使用 Thymeleaf 将现有 div 替换为片段 div 的内容

java - 动态 HTML 表单名称生成

java - Spring Boot 1.4 和 Thymeleaf 2 安全性