我非常失望,我遵循了有关如何将Thymeleaf添加到Spring MVC项目的教程,但是它甚至不适用于3类示例项目。 Thymeleaf无法找到我的观点,我也不知道自己缺少什么。
Stacktrace:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/WEB-INF/views/test.html]")
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
SpringMVCConfiguration.class
@Configuration
@ComponentScan({ "main.java" })
@EnableWebMvc
public class SpringMVCConfiguration implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
}
DispatcherServletConfiguration.class
public class DispatcherServletConfiguration extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { SpringMVCConfiguration.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
TestController.class
@Controller
public class TestController {
@GetMapping("/test")
public String test(Model model) {
System.out.println("controller test");
return "test";
}
}
在Eclipse中,HTML文件位于此处:
-- Project
-- WebContent
-- WEB-INF
-- views
- test.html
test.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>TEST</h1>
</body>
</html>
答案 0 :(得分:0)
为使运行更快起步,我建议使用带有百里香叶启动器的spring-boot。它处理大多数令人沮丧的接线代码,以避免出现这些问题。
https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-thymeleaf/
根据您的代码,我猜您的组件扫描错误。可以将它从main.java切换到程序包层次结构的根...是什么?它可能是main.java文件所在的软件包名称。
还可以尝试将您的WEB-INF移至<script>
function setCard() {
var carta = document.getElementById('idlistaCarte').value;
document.getElementById('idcodice_carta').innerHTML = carta;
}
</script>
<table>
<tr>
<td><p>Conferma Pagamento</p></td>
</tr>
<tr>
<td><select name="listaCarte" id="idlistaCarte">
<%
int i = 0;
for (String titolareCarta : listatitolare_carta) {
%>
<option value="<%=listacodice_carta.get(i)%>"
id="idcodice_carta_select">
<%=titolareCarta%>,<%=listacodice_carta.get(i)%>,<%=listatipologia_carta.get(i)%>
</option>
<%
i++;
}
%>
</select></td>
</tr>
<tr>
<td><input type="button" onclick="setCard()" value="Set Card"></td>
<td><p id="idcodice_carta"></p></td>
</tr>
<tr>
<td><input type="text" placeholder="codice_carta"
name="codice_carta" id="idcodice_carta" required></td>
</tr>
</table>
吗?