2017-04-21 1 views
1

Y a-t-il un moyen d'envoyer à la fois du texte et une version html dans le même fichier sampletemplate.html? Nous avons utilisé l'API Java Mail Sender pour créer du contenu en texte brut et du contenu html. Nous avons essayé le code ci-dessous: Votre nom est [[$ {TestName}]] pour afficher la version du texte mais il ne mappe pas les valeurs car il ne reconnaît pas le format. avons essayé ci-dessous la version etTexte Thymeleaf et version html

[# th:if="${PLAIN}"] 
    Your name is [[${TestName}]] 
[/] 
[# th:if="${PLAIN} = false"] 
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:th="http://www.thymeleaf.org" > 
    <head></head><body>Your name is [[${TestName}]]</body</html> 

Est-il possible que je peux avoir à la fois le texte et la version html dans mes template.I suis en utilisant botte de printemps mais en essayant de supprimer le modèle de vitesse existante car ils ne sont pas pris en charge plus. Tout autre moteur de modèle qui m'aide à atteindre cet objectif? TIA.

Répondre

0

Vous pouvez remplacer le template engine configuration comme txt résolveur, comme suivant:

@Configuration 
@EnableWebMvc 
public class ThymeleafConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { 

    private static final String UTF8 = "UTF-8"; 

    private ApplicationContext applicationContext; 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext) { 
     this.applicationContext = applicationContext; 
    } 

    private TemplateEngine templateEngine(ITemplateResolver templateResolver) { 
     SpringTemplateEngine engine = new SpringTemplateEngine(); 
     engine.setTemplateResolver(templateResolver); 
     return engine; 
    } 

    @Bean 
    public ViewResolver txtViewResolver() { 
     ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
     resolver.setTemplateEngine(templateEngine(txtTemplateResolver())); 
     resolver.setContentType("text/plain"); 
     resolver.setCharacterEncoding(UTF8); 
     resolver.setViewNames(array("*.html")); 
     return resolver; 
    } 

    private ITemplateResolver txtTemplateResolver() { 
     SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
     resolver.setApplicationContext(applicationContext); 
     resolver.setPrefix("/templates/"); 
     resolver.setTemplateMode(TemplateMode.TEXT); 
     return resolver; 
    } 
} 

Ensuite, vous analyser tout le texte, en évitant les erreurs de résolveur de modèle HTML, de sorte que vous utilisez un booléen comme vous l'avez fait et analyser le txt ou le html:

[# th:if="${PLAIN} = true"] 
    Your name is [# th:utext="${TestName}" /] 
[/] 
[# th:if="${PLAIN} = false"] 
    <html lang="en"> 
    <head></head><body>Your name is [# th:utext="${TestName}" /]</body</html> 
[/] 

Ensuite, vous venez d'ajouter le txt généré par thymeleaf à votre courrier.

+0

Génial .. Merci beaucoup !! Vous avez quelques questions de suivi - Le modèle sera .html ou fichier .txt? Il faudra encore déclarer que son modèle thymeleaf Cela ne créera-t-il pas un problème? Avez-vous une idée de comment puis-je tester la version texte de l'envoi de courrier électronique dans Outlook ou Gmail? –

+0

Le template doit être ce que vous avez défini dans 'resolver.setViewNames (array (" * .html "));'. Dans l'exemple est html mais vous pouvez utiliser ce que vous voulez. Sinon vous avez raison, supprimez la déclaration thymeleaf 'xmlns: th =" thymeleaf.org "', je n'ai pas réalisé (réponse mise à jour) – Pau

+0

Sinon, pour tester le texte de la version, j'imagine que vous utilisez la classe Spring MimeMessageHelper. 'setText (String texte, boolean html)' et définissez le html booléen à false ou true, dépendre que vous voulez être html ou non – Pau