Spring boot thymeleaf layout [找不到带有URI*.css/*.js的HTTP请求的映射]

H.H*_*Hao 1 thymeleaf

我使用thymeleaf和springboot构建一个框架.并尝试使用百里香的布局模板.问题是使用ThymeleafLayoutInterceptor使用布局模板时.无法找到css和js的网址.

代码和配置如下:

您可以通过链接项目视图查看项目布局

public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {

private static final String DEFAULT_LAYOUT = "layouts/default";

private static final String DEFAULT_VIEW_ATTRIBUTE_NAME = "view";

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    if (modelAndView == null || !modelAndView.hasView()) {
        return;
    }
    String originalViewName = modelAndView.getViewName();
    if (isRedirectOrForward(originalViewName)) {
        return;
    }
    modelAndView.setViewName(DEFAULT_LAYOUT);
    modelAndView.addObject(DEFAULT_VIEW_ATTRIBUTE_NAME,originalViewName);
}

private boolean isRedirectOrForward(String viewName) {
    return viewName.startsWith("redirect:") || viewName.startsWith("forward:");
}
Run Code Online (Sandbox Code Playgroud)

}

@组态

公共类WebMvcConfig扩展WebMvcConfigurationSupport {

@Override
protected void addInterceptors(InterceptorRegistry registry) {
    super.addInterceptors(registry);
    registry.addInterceptor(new ThymeleafLayoutInterceptor());
}

@Bean
public ServletContextTemplateResolver templateResolver(){
    ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
    resolver.setPrefix("/templates/views/");
    resolver.setSuffix(".html");
    resolver.setTemplateMode("HTML5");
    resolver.setOrder(1);
    return resolver;
}

@Bean
public SpringTemplateEngine templateEngine(){
    Set<IDialect> dialects = new HashSet<>();
    dialects.add(new LayoutDialect());
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setTemplateResolver(templateResolver());
    engine.setAdditionalDialects(dialects);
    return engine;
}

@Bean
public ThymeleafViewResolver thymeleafViewResolver(){
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setTemplateEngine(templateEngine());
    resolver.setViewNames(new String[]{"*","springBootMvc/js/*","springBootMvc/css/*"});
    return resolver;
}
Run Code Online (Sandbox Code Playgroud)

}

default.html中

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

<head>
    <link th:href="@{/dataTable/media/css/jquery.dataTables.css}" rel="stylesheet" type="text/css"/>
    <link href="css/boot.css" rel="stylesheet" type="text/css"/>
    <link th:href="@{/bootstrap/css/bootstrap.min.css}" rel="stylesheet" type="text/css"/>

    <script th:src="@{/dataTable/media/js/jquery.js}" type="text/javascript" charset="utf8"/>
    <script th:src="@{/dataTable/media/js/jquery.dataTables.js}" type="text/javascript" charset="utf8"></script>
    <script th:src="@{/bootstrap/js/bootstrap.min.js}" type="text/javascript" charset="utf8"/>
    <script th:src="@{/js/boot.js}" type="text/javascript" charset="utf8"/>
</head>
<body>
<div th:raplace="fragments/header :: header">
    Header1
</div>
<div th:replace="${view} :: content">
    Content
</div>
<div th:replace="fragments/footer :: footer">
    Footer
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

html的

application.yaml

server:
  context-path: /springBootMvc
  port: 8082

spring:
  profiles:
    active: test
  messages:
    basename: i18n
  devtools:
    restart:
      exclude: static/**
      additional-paths: src/main/
  thymeleaf:
    prefix: /templates/views/
    suffix: .html
Run Code Online (Sandbox Code Playgroud)

然后出现问题,我无法获得*.js和*.css的网址.错误堆栈如下:

2016-07-07 09:22:08.427  WARN 9572 --- [nio-8082-exec-2] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/css/boot.css] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.452  WARN 9572 --- [nio-8082-exec-4] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/dataTable/media/js/jquery.js] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.454  WARN 9572 --- [nio-8082-exec-5] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/dataTable/media/css/jquery.dataTables.css] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.457  WARN 9572 --- [nio-8082-exec-6] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/bootstrap/css/bootstrap.min.css] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.461  WARN 9572 --- [nio-8082-exec-7] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/dataTable/media/js/jquery.dataTables.js] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.475  WARN 9572 --- [nio-8082-exec-3] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/bootstrap/js/bootstrap.min.js] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.740  WARN 9572 --- [nio-8082-exec-8] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/springBootMvc/js/boot.js] in DispatcherServlet with name 'dispatcherServlet'
2016-07-07 09:22:08.745 ERROR 9572 --- [nio-8082-exec-2] o.a.c.c.C.[Tomcat].[localhost]           : Exception Processing ErrorPage[errorCode=0, location=/error]
Run Code Online (Sandbox Code Playgroud)

如果我删除类WebMvcConfig,则可以找到那些*.css和*.js.但布局模板不再起作用. 屏幕与js,css但没有页眉和页脚

Ber*_*erk 13

在扩展WebMvcConfigurerAdapter的类中,我使用了@EnableWebMvc注释,关于相同的布局示例.

我删除了这个注释,布局工作相同,并加载了CSS.

我希望这有帮助.

  • 同样在这里。但为什么? (2认同)