【问题标题】:Mvc Thymeleaf Spring Http 500Mvc Thymeleaf Spring Http 500
【发布时间】:2021-11-19 03:16:33
【问题描述】:

我已经阅读过类似的问题,但我没有找到解决方案。我对 Thymeleaf 有一些问题,因为这段代码与 jsp 一起工作。但是使用 Thymeleaf 它找不到我的查看页面。

这是一个 WebConfig 类

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = " namePackage.controller;")
public class WebConfig implements WebMvcConfigurer
 @Autowired
   private ApplicationContext applicationContext;

   /*
    * STEP 1 - Create SpringResourceTemplateResolver
    * */
   @Bean
   public SpringResourceTemplateResolver templateResolver() {
      SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
      templateResolver.setApplicationContext(applicationContext);
      templateResolver.setPrefix("src/main/webapp/WEB-INF/views/");
      templateResolver.setSuffix(".html");
      return templateResolver;
   }

   /*
    * STEP 2 - Create SpringTemplateEngine
    * */
   @Bean
   public SpringTemplateEngine templateEngine() {
      SpringTemplateEngine templateEngine = new SpringTemplateEngine();
      templateEngine.setTemplateResolver(templateResolver());
      templateEngine.setEnableSpringELCompiler(true);
      return templateEngine;
   }

   /*
    * STEP 3 - Register ThymeleafViewResolver
    * */
   public void configureViewResolvers(ViewResolverRegistry registry) {
      ThymeleafViewResolver resolver = new ThymeleafViewResolver();
      resolver.setTemplateEngine(templateEngine());
      registry.viewResolver(resolver);
   }
}

这是一个简单的控制器

 @Controller
 @RequestMapping("/")
 public class BenvenutoController {
    @GetMapping("/ciao")
 public String ciao(Model model) {
    model.addAttribute("mex", "Hello");
   return "welcome";
    }
 }

这是 html 页面(名为“欢迎”的视图)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hi</title>
</head>
<body>
<div >
   <h1>Hello</h1>
   <p th:text="${mex}"></p>
</div>
</body>
</html>

org.springframework.web.util.NestedServletException:处理程序调度失败;嵌套异常是 java.lang.Error:未解决的编译问题: 类型Model中的addAllAttributes(Collection>)方法不适用于参数(String, String)

所以它找不到我的视图页面,但它的路径是正确的。 我正在使用 Spring Tool Suite,就像一个 idee。

所有堆栈跟踪错误:

java.io.FileNotFoundException: Could not open ServletContext resource [/src/main/webapp/WEB-INF/views/welcome.html]
at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:159)
at org.thymeleaf.spring5.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:649)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)
at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366)
at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1400)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:831)

【问题讨论】:

  • src 目录不是有效的运行时位置。试试templateResolver.setPrefix("/WEB-INF/views/");,另见FileNotFoundException while using multiple folders for Thymeleaf 3 template resolver
  • @andrewjames 谢谢。我解决问题。如果我这样写,Java 找不到文件:setPrefinx("/WEB-INF/**),但如果我这样写,java 会找到文件:setPrefix("WEB-INF/**)跨度>
  • 好消息。您可以将其写为答案,以供将来的访问者使用。您也可以接受自己的答案。
  • @andrewjames 您可以在 2 天内接受自己的答案

标签: java spring spring-mvc model-view-controller thymeleaf


【解决方案1】:

正确的运行时位置是:templateResolver.setPrefix("WEB-INF/view/"); 不正确的是; templateResolver.setPrefix("src/main/webapp/WEB-INF/views/");和:templateResolver.setPrefix("/WEB-INF/view/");

【讨论】:

    【解决方案2】:

    你可以在 WebAppConfig Step1 替换这个 Bean:

    @Bean
        public InternalResourceViewResolver internalResourceViewResolver () {
            InternalResourceViewResolver internalResolver = new InternalResourceViewResolver();
            internalResolver.setPrefix("/WEB-INF/views/");
            internalResolver.setSuffix(".html");
            return internalResolver;
        }
    

    【讨论】:

    • 我尝试插入这个 bean,但使用 thymeleaf 它不起作用。我不得不使用“ThymeleafViewResolver”。我已经找到了解决方案。我在 setPrefix("/path"); 中输入了错误的路径;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2018-06-12
    • 2019-06-28
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多