Thymeleaf: вставка содержимого CSS-файла webjar в тег style - PullRequest
0 голосов
/ 12 сентября 2018

В некоторых сценариях вставка файла CSS предпочтительнее, чем ссылка на него через URL (например, при рендеринге включающей HTML-страницы). Этот CSS-файл может быть взят из веб-архива.

Что мне нужно, чтобы сделать звонок, как эта работа:

<style th:insert="/webjars/bootstrap/bootstrap.css"></style>

Это запускается в среде весенней загрузки, без какого-либо веб-сервера.

1 Ответ

0 голосов
/ 13 сентября 2018

Так что я заставил его работать со специальным TemplateResolver. Его логика похожа на WebJarsResourceResolver Spring и использует 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...