web-dev-qa-db-fra.com

Thymeleaf: le modèle peut ne pas exister ou peut ne pas être accessible par l'un des résolveurs de modèles configurés

J'ai ce code:

private static final String EMAIL_INLINEIMAGE_TEMPLATE_NAME = "templateemail.html";

@Bean
public TemplateEngine emailTemplateEngine() {
    templateEngine = new SpringTemplateEngine();
    templateEngine.addTemplateResolver(this.htmlTemplateResolver());
       )

    templateEngine.setTemplateEngineMessageSource(this.messageSource);
    return templateEngine;
}

private static ITemplateResolver htmlTemplateResolver() {
    final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setOrder(Integer.valueOf(0));
    templateResolver.setPrefix("classpath:/templates/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateResolver.DEFAULT_TEMPLATE_MODE);
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setCacheable(false);
    return templateResolver;
}


public void sendEmail(String emailAddress, String title, String body, Locale local, String image) {
    if (Boolean.parseBoolean(isEmailServiceActivated)) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mailMsg = new MimeMessageHelper(mimeMessage);
        try {
            mailMsg.setFrom(EMAIL_USERNAME);
            mailMsg.setTo(emailAddress);
            mailMsg.setSubject(title);

            // Prepare the evaluation context
            ctx.setLocale(local);
            ctx.setVariable("imageHeaderResourceName", HEADER_LOGO_IMAGE);
            ctx.setVariable("body", body);

            ctx.setVariable("imageResourceName", image);

            final String htmlContent = this.templateEngine.process(new ClassPathResource(EMAIL_INLINEIMAGE_TEMPLATE_NAME).getPath(), ctx);
            mailMsg.setText(htmlContent, true );

            mailMsg.addInline(HEADER_LOGO_IMAGE, new ClassPathResource(HEADER_LOGO_IMAGE ) , PNG_MIME);
            mailMsg.addInline(image, new ClassPathResource(image) , PNG_MIME);

        } catch (MessagingException e) {
            e.printStackTrace();
        }

        mailSender.send(mimeMessage);
    }
}

J'ai le fichier templateemail.html sous/templates/directory. lorsque je lance la méthode d'envoi par courrier électronique, j'ai cette exception:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "templateemail.html", template might not exist or might not be accessible by any of the configured Template Resolvers

Je ne sais pas si c'est parce que templateEngine ne peut pas trouver mon fichier (j'essaie même avec le chemin absolu de Tomcat et le répertoire/bin mais aucun moyen) ou parce que je n'ai pas configuré le bon résolveur de modèles. Merci beaucoup pour votre aide. je

3
MK-rou

Cela fonctionne maintenant en supprimant ".html" dans le nom du modèle (le fichier a l'extension html) 

private static final String EMAIL_INLINEIMAGE_TEMPLATE_NAME = "templateemail"
5
MK-rou

Notez le comportement non multiplateforme qui peut se produire: sous Windows, le modèle CamelCase.html a été résolu, mais pas sous Linux Ubuntu! Là je devais le renommer camelcase.html, tous les caractères en minuscule

1
Ilya Yevlampiev