我正在使用:
所有项目都基于多个模块。
关于Spring Framework
和Thymeleaf
整合,我有以下内容
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/view/html/");
templateResolver.setSuffix(".html");
//templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setTemplateMode("HTML5");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
//In other class
@Bean
public ViewResolver thymeleafViewResolver(SpringTemplateEngine springTemplateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(springTemplateEngine);
return viewResolver;
}
在众多模块中,我有这两个:
thymeleaf-02-controller
:关于@Controller
s thymeleaf-02-web
:所有关于.html
文件(css,js)是的,重要的是将所有关于网络文件.java
,.html
等的.js
文件分开来了......)
关于Gradle
他们的配置:
在thymeleaf-02-web
模块中存在:
apply plugin: 'war'
project(':thymeleaf-02-web') {
description 'Web (HTML, JS, CSS)'
dependencies {
exportedProjects.each{
if("$it"!=":thymeleaf-02-web")
compile project("$it")
}
}
webAppDirName = 'src/main/webapp'
war {
version=''
baseName = warBaseName
}
...
}
在thymeleaf-02-controller
模块中存在:
project(':thymeleaf-02-controller') {
description 'Web - Controller'
dependencies {
compile project(':thymeleaf-02-infrastructure')
compile project(':thymeleaf-02-service-api')
...
//Omicron:
//What is the correct approach?
//The code shown below does not work
testCompile project(':thymeleaf-02-web')
testRuntime project(':thymeleaf-02-web')
testRuntime fileTree(dir: "/WEB-INF/view/html", include: '*.html')
}
}
注意:如果多模块项目导出到.war
文件,一切正常,当然在Tomcat
。因此runtime
环境是稳定的
问题与testing
环境有关,仅适用于thymeleaf-02-controller
模块。因此总是出现:
[main] ERROR org.thymeleaf.TemplateEngine -
[THYMELEAF][main] Exception processing template "persona/deleteOne":
An error happened during template parsing
(template: "ServletContext resource
[/WEB-INF/view/html/persona/deleteOne.html]")
org.thymeleaf.exceptions.TemplateInputException:
An error happened during template parsing
(template: "ServletContext resource
[/WEB-INF/view/html/persona/deleteOne.html]")
...
Caused by: java.io.FileNotFoundException:
Could not open ServletContext resource
[/WEB-INF/view/html/persona/deleteOne.html]
...
由于FileNotFoundException
我已经完成了以下“解决方案”:
但没有,问题仍然存在。
解决上面显示的Omicron
部分的正确方法是什么?
因此,只有测试 thymeleaf-02-controller
模块无法引用/访问/查看/使用位于.html
目录中的所有/WEB-INF/view/html/..
文件thymeleaf-02-web
模块。
有一点很奇怪的是,.java
模块中的src/main/java
源文件夹中必须至少存在一个thymeleaf-02-web
文件才能在{ {1}}模块thymeleaf-02-controller
如何通过thymeleaf-02-web
进行依赖。否则Project and External Dependencies
不会出现依赖关系。
答案 0 :(得分:0)
解决方案应用以下逻辑
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("classpath:/templates/html/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
return templateResolver;
}
因此:
templateResolver.setPrefix("/WEB-INF/view/html/");
templateResolver.setPrefix("classpath:/templates/html/");