为了账号安全,请及时绑定邮箱和手机立即绑定

Thymeleaf:将 webjar CSS 文件的内容插入样式标签

Thymeleaf:将 webjar CSS 文件的内容插入样式标签

大话西游666 2021-09-15 15:43:42
在某些情况下,内联 CSS 文件比通过 URL 引用它更受欢迎(例如,在呈现包含所有内容的 HTML 页面时)。该 CSS 文件可能来自 webjar。我需要什么才能拨打这样的电话:<style th:insert="/webjars/bootstrap/bootstrap.css"></style>这是在 spring-boot 环境中运行的,没有任何网络服务器。
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

所以我让它与一个特殊的 TemplateResolver 一起工作。它的逻辑类似于 Spring 的WebJarsResourceResolver,并且使用WebJarAssetLocator.


public class WebJarTemplateResolver extends ClassLoaderTemplateResolver {


    private final static String WEBJARS_PREFIX = "/webjars/";


    private final static int WEBJARS_PREFIX_LENGTH = WEBJARS_PREFIX.length();


    private final WebJarAssetLocator webJarAssetLocator = new WebJarAssetLocator();


    @Override

    protected ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, String resourceName, String characterEncoding, Map<String, Object> templateResolutionAttributes) {


        resourceName = findWebJarResourcePath(template);

        if (resourceName == null) {

            return null;

        }


        return super.computeTemplateResource(configuration, ownerTemplate, template, resourceName, characterEncoding, templateResolutionAttributes);

    }


    @Nullable

    protected String findWebJarResourcePath(String templateName) {

        if (!templateName.startsWith(WEBJARS_PREFIX)) {

            return null;

        }


        int startOffset = WEBJARS_PREFIX_LENGTH;

        int endOffset = templateName.indexOf('/', startOffset);


        if (endOffset == -1) {

            return null;

        }


        String webjar = templateName.substring(startOffset, endOffset);

        String partialPath = templateName.substring(endOffset + 1);

        return this.webJarAssetLocator.getFullPathExact(webjar, partialPath);

    }

}

这通过以下配置集成到应用程序中:


@Configuration

public class ThymeleafConfiguration {


    private SpringTemplateEngine templateEngine;


    public ThymeleafConfiguration(SpringTemplateEngine templateEngine) {

        this.templateEngine = templateEngine;

    }


    @PostConstruct

    public void enableWebjarTemplates() {

        templateEngine.addTemplateResolver(new WebJarTemplateResolver());

    }

}


查看完整回答
反对 回复 2021-09-15
  • 1 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信