Весной Boot + Thymeleaf + Летающая тарелка импортированы css не работает - PullRequest
0 голосов
/ 23 марта 2020

Я не понимаю, почему css не работает (я уже следовал тому, что сказано в этой теме ). У меня есть следующая структура файлов для моих ресурсов:

resources
    - static
         -style
            style.css
 - templates:
      - CV.html

В шаблоне я проверил, что URL сгенерирован правильно, это так. CSS также корректно обслуживается: когда я использую сгенерированный URL в браузере, файл CSS подается.

Код моего шаблона:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" lang="fr">
<head>
    <title>CV ARSENE LAPOSTOLET</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <link type="stylesheet" href="../static/css/style.css" th:href="@{|${baseUrl}/css/style.css|}"/>

</head>

<body>

<span th:text="|${baseUrl}/css/style.css|"></span>

<!--/*@thymesVar id="abilities" type="List<Ability>"*/-->
<div class="rouge" th:each="ability: ${abilities}">
    <span th:text="${ability.getName()}"></span>
</div>
</body>
</html>

Мой Java код:

@RestController
@RequestMapping("/cv")
@AllArgsConstructor
public class CvController {

    private CvService cvService;
    private AbilityRepository abilityRepository;
    private ServletContext servletContext;

    @GetMapping("")
    public ResponseEntity<Resource> getCv(HttpServletRequest servletRequest, HttpServletResponse servletResponse){
        Locale locale = getLocale(servletRequest);
        WebContext context = new WebContext(servletRequest, servletResponse, servletContext, locale);
        context.setVariable("abilities", abilityRepository.findAll());
        context.setVariable("baseUrl",getCurrentBaseUrl());

        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType("application/pdf"))
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + "CV_ARSENE_LAPOSTOLET.pdf" + "\"")
                .body(new ByteArrayResource(cvService.renderCv(context)));
    }

    private static String getCurrentBaseUrl() {
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest req = sra.getRequest();
        return req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
    }
}
@Service
@AllArgsConstructor
@CommonsLog
public class CvService {

    private TemplateEngine templateEngine;

    public byte[] renderCv(WebContext ctx) {

        String processedHtml = templateEngine.process("CV", ctx);

        try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(processedHtml);
            renderer.layout();
            renderer.createPDF(os);

            return os.toByteArray();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return null;
        }
    }


}
...