解析模板 "index" 时出错,模板可能不存在或可能无法被任何已配置的模板解析器访问
Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
之前有人问过这个问题,但我没有解决我的问题,而且我得到了一些奇怪的功能。
如果我将 index.html
文件放在静态目录中,如下所示:
我的浏览器出现以下错误:
在我的控制台中:
[THYMELEAF][http-nio-8080-exec-3] Exception processing template "login":
Exception parsing document: template="login", line 6 - column 3
2015-08-11 16:09:07.922 ERROR 5756 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].
[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet]
in context with path [] threw exception [Request processing failed; nested
exception is org.thymeleaf.exceptions.TemplateInputException: Exception
parsing document: template="login", line 6 - column 3] with root cause
org.xml.sax.SAXParseException: The element type "meta" must be terminated by
the matching end-tag "</meta>".
但是,如果我将 index.html 文件移动到模板目录中,我的浏览器会出现以下错误:
我已经添加了我的视图解析器:
@Controller
@EnableWebMvc
public class WebController extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").setViewName("index");
registry.addViewController("/results").setViewName("results");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/form").setViewName("form");
}
@RequestMapping(value="/", method = RequestMethod.GET)
public String getHomePage(){
return "index";
}
@RequestMapping(value="/form", method=RequestMethod.GET)
public String showForm(Person person) {
return "form";
}
@RequestMapping(value="/form", method=RequestMethod.POST)
public String checkPersonInfo(@Valid Person person, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "redirect:/results";
}
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("templates/");
//resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
WebSecurityConfig.java
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/index").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<meta>
<meta> charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome</h1>
<a href="../../login.html"><span>Click here to move to the next page</span></a>
</body>
</html>
此时我不知道发生了什么。谁能给我一些建议?
更新
我在 index.html
中漏掉了一个拼写错误,但我仍然遇到同样的错误
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta> charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome</h1>
<a href="../../login.html"><span>Click here to move to the next page</span></a>
</body>
</html>
据我所知,index.html
应该在 templates
内。所以,你的第二次尝试看起来是正确的。
但是,正如错误消息所说,index.html
看起来有些错误。例如。在第三行中,我认为 meta
标签实际上应该是 head
标签。
在控制台中告诉您与登录冲突。我认为您也应该在 index.html
Thymeleaf 中声明。类似于:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>k</title>
</head>
检查
的名称
templates
文件夹。它应该是模板而不是模板(没有 s)。
这个错误大部分时间可能是由于缺少结束标记而发生的。此外,您可以通过以下依赖项来解决此问题,同时支持旧版 HTML formate.
因为它是您的代码字符集="UTF-8">这里没有关闭元标记。
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
如果您遇到这个问题并且一切正常,请尝试从您的 IDE 中使 cache/restart 无效。这将解决大多数情况下的问题。
对我来说,问题是因为区分大小写。我使用的是 ~{fragments/Base}
而不是 ~{fragments/base}
(文件名是 base.html
)
我的开发环境是 windows 但托管应用程序的服务器是 Linux 所以我在开发过程中没有看到这个问题,因为 windows' 路径不区分大小写。
这可能是由于一些异常,例如(将 NUMERIC 解析为字符串,反之亦然)。
请验证单元格值是否为空或处理异常并查看。
最好的,
沙希德
这可以通过在application.properties
中复制以下代码来解决
spring.thymeleaf.enabled=false
这让我成功了!
prefix: classpath:/templates/
检查你的application.yml
我是 spring 的新手,花了一个小时试图解决这个问题。
转到 --- > application.properties
添加这些:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
我在调试这个问题上浪费了 2 个小时。
尽管我的模板文件位于正确的位置(在 resources/templates/ 内),但我仍然遇到同样的错误。
原来是因为我在我的项目中创建了一些额外的包。例如,所有控制器文件都在 'controller' 包中。
我对 Spring Initializr 自动生成的文件做了同样的事情。
我不明白为什么会这样,
但是当我将 ServletInitializer
文件和带有 @SpringBootApplication
注释的文件移回项目的根目录时,错误消失了!
如果模板名称以 前导斜线开头,也可能出现错误消息:
return "/index";
在 IDE 中,文件已成功解析为带有两个斜杠的路径:
getResource(templates//index.html)
Delegating to parent classloader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@2399ee45
--> Returning 'file:/Users/andreas/git/my-project/frontend/out/production/resources/templates//index.html'
在生产系统上,模板被打包到 jar 中,带有两个斜杠的解决方案不起作用并导致相同的错误消息。
✅ 省略前导斜线:
return "index";
对我来说,在 pom.xml 中包含这些会导致异常。从 pom.xml 中删除它可以解决问题。
(老实说,我不知道那是怎么发生的)
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
在 application.properties 中添加 spring.thymeleaf.mode=HTML5
对我有用。你也可以试试。
我也遇到了 TemplateResolver
查看错误,在 application.properties
中添加 spring.thymeleaf.mode=HTML5
对我有用。如果在 STS 中创建构建,并且 运行 for Websphere 9 ..
检查 html 文件在 src/main/resources/templates 文件夹中是否可用
在我的例子中,我按照上面的建议做了所有其他事情,但它仍然在抱怨“模板可能不存在或者可能无法被任何配置的模板解析器访问”。在将我的项目与其他一些运行良好的示例项目进行比较时,我发现我遗漏了
<configuration>
<addResources>true</addResources>
</configuration>
在 spring-boot-maven-plugin 中。添加哪个对我有用。所以我的插件部分现在看起来像
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
我不确定为什么我需要添加标签才能让 thymeleaf 正常工作。
我解决了这个问题重新加载项目 Maven
之前有人问过这个问题,但我没有解决我的问题,而且我得到了一些奇怪的功能。
如果我将 index.html
文件放在静态目录中,如下所示:
我的浏览器出现以下错误:
在我的控制台中:
[THYMELEAF][http-nio-8080-exec-3] Exception processing template "login":
Exception parsing document: template="login", line 6 - column 3
2015-08-11 16:09:07.922 ERROR 5756 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].
[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet]
in context with path [] threw exception [Request processing failed; nested
exception is org.thymeleaf.exceptions.TemplateInputException: Exception
parsing document: template="login", line 6 - column 3] with root cause
org.xml.sax.SAXParseException: The element type "meta" must be terminated by
the matching end-tag "</meta>".
但是,如果我将 index.html 文件移动到模板目录中,我的浏览器会出现以下错误:
我已经添加了我的视图解析器:
@Controller
@EnableWebMvc
public class WebController extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").setViewName("index");
registry.addViewController("/results").setViewName("results");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/form").setViewName("form");
}
@RequestMapping(value="/", method = RequestMethod.GET)
public String getHomePage(){
return "index";
}
@RequestMapping(value="/form", method=RequestMethod.GET)
public String showForm(Person person) {
return "form";
}
@RequestMapping(value="/form", method=RequestMethod.POST)
public String checkPersonInfo(@Valid Person person, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "redirect:/results";
}
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("templates/");
//resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
WebSecurityConfig.java
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/index").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<meta>
<meta> charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome</h1>
<a href="../../login.html"><span>Click here to move to the next page</span></a>
</body>
</html>
此时我不知道发生了什么。谁能给我一些建议?
更新
我在 index.html
中漏掉了一个拼写错误,但我仍然遇到同样的错误
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta> charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome</h1>
<a href="../../login.html"><span>Click here to move to the next page</span></a>
</body>
</html>
index.html
应该在 templates
内。所以,你的第二次尝试看起来是正确的。
但是,正如错误消息所说,index.html
看起来有些错误。例如。在第三行中,我认为 meta
标签实际上应该是 head
标签。
在控制台中告诉您与登录冲突。我认为您也应该在 index.html
Thymeleaf 中声明。类似于:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>k</title>
</head>
检查
的名称templates
文件夹。它应该是模板而不是模板(没有 s)。
这个错误大部分时间可能是由于缺少结束标记而发生的。此外,您可以通过以下依赖项来解决此问题,同时支持旧版 HTML formate.
因为它是您的代码字符集="UTF-8">这里没有关闭元标记。
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
如果您遇到这个问题并且一切正常,请尝试从您的 IDE 中使 cache/restart 无效。这将解决大多数情况下的问题。
对我来说,问题是因为区分大小写。我使用的是 ~{fragments/Base}
而不是 ~{fragments/base}
(文件名是 base.html
)
我的开发环境是 windows 但托管应用程序的服务器是 Linux 所以我在开发过程中没有看到这个问题,因为 windows' 路径不区分大小写。
这可能是由于一些异常,例如(将 NUMERIC 解析为字符串,反之亦然)。
请验证单元格值是否为空或处理异常并查看。
最好的, 沙希德
这可以通过在application.properties
中复制以下代码来解决spring.thymeleaf.enabled=false
这让我成功了!
prefix: classpath:/templates/
检查你的application.yml
我是 spring 的新手,花了一个小时试图解决这个问题。
转到 --- > application.properties
添加这些:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
我在调试这个问题上浪费了 2 个小时。
尽管我的模板文件位于正确的位置(在 resources/templates/ 内),但我仍然遇到同样的错误。
原来是因为我在我的项目中创建了一些额外的包。例如,所有控制器文件都在 'controller' 包中。
我对 Spring Initializr 自动生成的文件做了同样的事情。
我不明白为什么会这样,
但是当我将 ServletInitializer
文件和带有 @SpringBootApplication
注释的文件移回项目的根目录时,错误消失了!
如果模板名称以 前导斜线开头,也可能出现错误消息:
return "/index";
在 IDE 中,文件已成功解析为带有两个斜杠的路径:
getResource(templates//index.html)
Delegating to parent classloader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@2399ee45
--> Returning 'file:/Users/andreas/git/my-project/frontend/out/production/resources/templates//index.html'
在生产系统上,模板被打包到 jar 中,带有两个斜杠的解决方案不起作用并导致相同的错误消息。
✅ 省略前导斜线:
return "index";
对我来说,在 pom.xml 中包含这些会导致异常。从 pom.xml 中删除它可以解决问题。 (老实说,我不知道那是怎么发生的)
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
在 application.properties 中添加 spring.thymeleaf.mode=HTML5
对我有用。你也可以试试。
我也遇到了 TemplateResolver
查看错误,在 application.properties
中添加 spring.thymeleaf.mode=HTML5
对我有用。如果在 STS 中创建构建,并且 运行 for Websphere 9 ..
检查 html 文件在 src/main/resources/templates 文件夹中是否可用
在我的例子中,我按照上面的建议做了所有其他事情,但它仍然在抱怨“模板可能不存在或者可能无法被任何配置的模板解析器访问”。在将我的项目与其他一些运行良好的示例项目进行比较时,我发现我遗漏了
<configuration>
<addResources>true</addResources>
</configuration>
在 spring-boot-maven-plugin 中。添加哪个对我有用。所以我的插件部分现在看起来像
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
我不确定为什么我需要添加标签才能让 thymeleaf 正常工作。
我解决了这个问题重新加载项目 Maven