非常简单的带有百里香的Spring MVC示例不起作用

时间:2018-08-30 13:02:27

标签: spring-mvc thymeleaf

我非常失望,我遵循了有关如何将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>

1 个答案:

答案 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> 吗?