我正在使用Spring和Thymeleaf。多亏了xerx593,我能够让它工作,所以我更新了这个问题以显示工作代码。
这是我的申请课
package com.propfinancing.www;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect;
@Controller
@SpringBootApplication
public class PfWebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PfWebApplication.class, args);
}
@Bean
public LayoutDialect layoutDialect() {
return new LayoutDialect();
}
@GetMapping("/page1.html")
public String page1() {
return "page1";
}
}
接下来,我在src/main/Resources/template/layout. html中创建一个布局.html文件
<!DOCTYPE html>
<html lang="en" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<body>
This is the layout template
<div layout:fragment="content">
<p>This is were the content will go</p>
</div>
</body>
</html>
最后,我创建了 /ser/main/resources/templates/page1.html来使用模板:
<!DOCTYPE html>
<html lang="en"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout}">
<body>
<div layout:fragment="content">
This is the content of page 1.
</div>
</body>
</html>
当我http://dev.propfinancing.com/www/page1.html时,它会给我期望的模板驱动输出。
谢谢尼尔
最明显的错误:
>
我在我的src/main/Resources/sight
目录中创建了一个名为page1. html
的简单html页面
(这非常适合(spring-web)静态内容,但是…)
最后,我更新了我的page1. html
以使用模板…
更新是不够的,你还必须将它移动到一个配置好的模板位置!所以将文件移动到src/main/资源/模板/
(默认位置,发出相同的浏览器请求,)将有希望/可能产生所需的结果(,或者至少抛出异常)。
简而言之:src/main/资源/静态
目录不适用于模板!(它仍然可以配置,但这将是非常奇怪的/hacky/一堆充满“副作用”!?)。
好吧,404,可以(简单地)修复:
@Controller // !
@SpringBootApplication
public class ThymeleafTestApplication {
public static void main(String[] args) {
SpringApplication.run(ThymeleafTestApplication.class, args);
}
@GetMapping("/page1.html") // !!
public String page1() {
return "page1"; // returning the view name
}
// ...
}
即通过为这个“视图”提供一个“控制器”。
或通过配置:
@SpringBootApplication
public class PfWebApplication // extends ...
implements WebMvcConfigurer {
@Override
public void addViewControllers (ViewControllerRegistry registry) {
ViewControllerRegistration r = registry.addViewController("/page1.html");
r.setViewName("page1");
// r.set...
}
...
一件重要的事情是:
@Bean
public LayoutDialect layoutDialect() {
return new LayoutDialect();
}
是“自动配置”方法,它为我们配备了“所有的Spring(引导)魔法”。
鉴于:
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addDialect(new LayoutDialect());
return templateEngine;
}
…是“DIY”的方法,我们必须调整(就像spring-boot那样)。
链接:
在我的例子中,问题在于装饰器
的使用,我通过简单地将装饰器
更改为装饰
来解决这个问题
在这里,当我使用装饰器使用Thymeleaf
配置创建的模板时出错
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="template1">