Ho una WebApp funzionante basata su Spring Boot (più recente 1.1.5.RELEASE) e Thymeleaf.
Ora desidero aggiungere funzionalità per inviare e-mail e utilizzare Thymelaf come motore di template.
In pom.xml aggiungo:
Avvio a molla per l'invio di e-mail utilizzando Thymeleaf come modello - la configurazione non funziona
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mail</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
A seguito di questo tutorial: http://www.thymeleaf.org/doc/articles/springmail.html
got completa (senza XML) di configurazione di Java così:
@Configuration
public ThymeleafReplaceConfigurator {
@Bean
public JavaMailSender getJavaMailSenderImpl(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
Properties props = new Properties();
/* some properties here */
javaMailSender.setJavaMailProperties(props);
return javaMailSender;
}
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
emailTemplateResolver.setPrefix("/mails/");
emailTemplateResolver.setSuffix(".html");
emailTemplateResolver.setTemplateMode("HTML5");
emailTemplateResolver.setCharacterEncoding("UTF-8");
emailTemplateResolver.setOrder(1);
return emailTemplateResolver;
}
@Bean
public ServletContextTemplateResolver defaultWebTemplateResolver(){
ServletContextTemplateResolver webTemplateResolver = new ServletContextTemplateResolver();
webTemplateResolver.setPrefix("/templates/");
webTemplateResolver.setSuffix(".html");
webTemplateResolver.setTemplateMode("HTML5");
webTemplateResolver.setCharacterEncoding("UTF-8");
webTemplateResolver.setOrder(2);
return webTemplateResolver;
}
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(emailTemplateResolver());
templateEngine.setTemplateResolver(defaultWebTemplateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}
}
cartelle e dei file albero è Mi piace:
src
main
resources
templates
login.html
error.html
mails
exampleMail.html
Ma non funziona. L'applicazione si avvia correttamente ma l'accesso alle pagine (che funziona senza questa configurazione) causa un'eccezione come:
Elaborazione richiesta non riuscita; l'eccezione annidata è org.thymeleaf.exceptions.TemplateInputException: Errore durante la risoluzione del modello "login", il modello potrebbe non esistere o non essere accessibile da nessuno dei Template Resolver configurati
Ho provato a inserire prefissi diversi in webTemplateResolver.setPrefix ma senza successo .
Inoltre ho notato bug segnalato nella versione precedente di Thymeleaf che lo ha causato, ma sembra che sia stato corretto e che io abbia una versione più recente.
Qualcuno vede la nebulizzazione in questa configurazione?
Il problema è che si sta configurando troppo. Spring Boot configura già il motore di template e il resolver di visualizzazione per te. Anche chiamare 'setTemplateResolver' due volte con diversi resolver non farà molto ma scavalca il precedente. Suggerisco di rimuovere tutto tranne la configurazione e-mail e 'emailTemplateResolver', tutto il resto sarà gestito da Spring Boot. –
Grazie mille M. Deinum, ora funziona come dovrebbe. In realtà non sapevo che Spring Boot autoconfigurato vedesse il mio resolver modello aggiuntivo fuori dalla scatola :) –
Neanch'io fino a quando non ho guardato la fonte per la configurazione automatica. –