@Tiagoguimaraes95 escreveu:
Pessoal, Boa Noite!
A minha dúvida é a seguinte: Estou fazendo um pequeno Framework relativo a envio de emails para ser utilizada pela comunidade. Nesse Framework há a possibilidade de envio de emails pré-definidos. Para resolver os arquivos HTML (no meu projeto externo .jar) usando o Thymeleaf estou utilizando o seguinte código:
//Aqui eu construo um Template Resolver específico (FileTemplateResolver) e adiciono ele ao // SpringTemplateEngine já criado (pelo Spring Boot) com a prioridade mais baixa, // para resolver os arquivos HTML que estão no meu projeto externo na pasta // resources/templates/mailTemplates/templatesPreDefined. @PostConstruct public void customTemplateResolver(){ try { templateEngine.addTemplateResolver(getTemplateResolver()); } catch (Exception e) { LOGGER.debug("Não foi possível definir um template resolver customizado para que seja utilizado" + " os templates pré definidos.", e); } } private ITemplateResolver getTemplateResolver() throws CustomTemplateResolverException { FileTemplateResolver resolver = new FileTemplateResolver(); resolver.setPrefix(getPrefixTemplateResolver()); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML5"); resolver.setCharacterEncoding("UTF-8"); resolver.setCacheable(false); resolver.setOrder(Ordered.LOWEST_PRECEDENCE); return resolver; } private String getPrefixTemplateResolver() throws CustomTemplateResolverException{ try { return getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath() + "templates" + BARRA + "mailTemplates" + BARRA + "templatesPredefined" + BARRA; } catch (URISyntaxException e) { LOGGER.debug("Não foi possível obter o prefixo (classpath) do template resolver.", e); throw new CustomTemplateResolverException("Não foi possível obter o prefixo (classpath) do template resolver.", e); } } //No código abaixo é onde eu processo os arquivos HTML do meu projeto externo. @Autowired private TemplateEngine templateEngine; @Autowired private Context context; templateEngine.process("mailTemplate", context)
Isso funciona muito bem, porém afim de deixar o código mais organizado não gostaria de colocar todos os css dentro do HTML e sim em um arquivo externo que venho importá-lô depois. Porém quando utilizo o código abaixo (th:href="@{/css/app/app.css}") recebo o seguinte erro: Link base "/css/app/app.css" cannot be context relative (/) or page relative unless you implement the org.thymeleaf.context.IWebContext interface (context is of class: org.thymeleaf.context.Context) (mailTemplate:4)
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> //Eu preciso importar esse "app.css" que está na pasta //resources/static/css/app/app.css do meu projeto externo. <link id="appcss" rel="stylesheet" th:href="@{/css/app/app.css}" /> </head> <body> Mail Template </body> </html>
Esse meu projeto irá rodar como uma biblioteca externa ao projeto principal, portanto o contexto e o path que tenho é do projeto principal. Como faço para definir uma pasta de resources e fazer com que o thymeleaf identifique a mesma na importação de recursos em um projeto que irá executar como uma biblioteca (.jar)?
Obs: Os dois projetos (principal e secundário) estão usando o Spring Boot 1.4 e consequentemente a versão agregada do Thymeleaf.
Desde já agradeço a atenção de todos. Muito Obrigado!
Mensagens: 1
Participantes: 1