【问题标题】:Thymeleaf + CSS+SpringBootThymeleaf + CSS + Spring Boot
【发布时间】:2017-05-26 00:08:17
【问题描述】:

我对 CSS 和 Thymeleaf 有疑问。

在我的 Spring Boot 应用程序中,我有这样的结构:

  • src/main/resource/static/css(用于 css 文件)
  • src/main/resource/static/templates(用于 html 文件)

现在,我的 html 页面名为 ErrorPage 和 css 文件名为 Layout.css,使用 Thymeleaf,在 ErrorPage 的头部:

<link href="../css/Layout.css" th:href="@{css/Layout.css}" type="text/css" />

但这不起作用。

我做错了什么?

【问题讨论】:

  • 你能验证一下,你的 ErrorPage 是在 src/main/resources/static/templates 还是 src/main/resources/模板?如果它在第一个中,则意味着它被作为 静态资源e 处理,这意味着不会使用 Thymeleaf 来呈现您的页面。如果它在第二个中,那么它可以使用 Thymeleaf,但这也可能意味着您将它用作控制器中的视图。您必须相对于控制器的位置而不是文件夹结构进行工作。共享使用此错误页面 HTML 的控制器/配置。
  • 什么不起作用? ErrorPage 不呈现或呈现但无法下载 css 文件?你使用弹簧安全吗?

标签: css spring-boot thymeleaf


【解决方案1】:

将您的template 文件夹移动到resources 的正下方:

  • src/main/resource/static/css(用于 CSS 文件);
  • src/main/resource/templates(用于 HTML 模板)。

然后更正link标签如下:

<link href="../static/css/Layout.css" th:href="@{/css/Layout.css}" rel="stylesheet" />

【讨论】:

  • 为什么我们同时需要'href'和'th:href'?
  • 我们可以轻松删除 HTML 并仅使用 Thymeleaf 的属性。请在此处阅读答案stackoverflow.com/questions/39757974/…
  • 不适合我给出错误“不能是上下文相关 (/) 或页面相关,除非你实现 org.thymeleaf.context.IWebContext”
【解决方案2】:

将模板文件夹移到资源下方:

src/main/resources/static/css (for CSS files);
src/main/resources/templates (for HTML templates).

然后将链接标签更正如下(相对或绝对):

<link href="../css/firstcss.css" rel="stylesheet">
<link href="/css/secondcss.css" rel="stylesheet">

前面有静态的旧解决方案对我不起作用。

【讨论】:

    【解决方案3】:

    此行为的罪魁祸首是自定义安全配置,您很可能在 WebSecurityConfigurerAdapter 子类中执行此操作。 如果您使用 SpringBoot 2+ 版本,则应在 WebSecurityConfigurerAdapter 配置中添加以下行

    .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2020-08-16
    • 2018-03-01
    • 1970-01-01
    • 2015-06-16
    • 2019-04-11
    • 2017-07-13
    • 2019-06-28
    • 2021-01-17
    • 2020-11-11
    相关资源
    最近更新 更多