2017-09-29 15 views
2

私は既存のアプリケーションをSpring 5.0.0.M3にマイグレーションしています。& Spring Boot 2.0.0.M3。 Spring Bootでは、Thymeleafのスターターもインポートしています。Spring Boot 2 Thymeleafの設定 'templates'を無視する

このアプリケーションには、2つのテンプレートフォルダmailstemplatesがあります。電子メールテンプレートに以下の設定を指定すると、templatesフォルダは無視されます。例えば私はこのフォルダのテンプレートのためにFileNotFoundExceptionを得ています。

@Configuration 
public class ThymeleafConfiguration { 

    @SuppressWarnings("unused") 
    private final Logger log=LoggerFactory.getLogger(ThymeleafConfiguration.class); 

    @Bean 
    @Description("Thymeleaf template resolver serving HTML 5 emails") 
    public ClassLoaderTemplateResolver emailTemplateResolver() { 
    ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver(); 
    emailTemplateResolver.setPrefix("mails/"); 
    emailTemplateResolver.setSuffix(".html"); 
    emailTemplateResolver.setTemplateMode("HTML5"); 
    emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8); 
    emailTemplateResolver.setOrder(1); 
    return emailTemplateResolver; 
    } 
} 

私は何の違いを行っていないなど2、10、へsetOrderパラメータを設定しようとしました。リゾルバメソッドを削除すると、templatesフォルダが認識されますが、mailsフォルダは認識されません。

何が起こっている可能性がありますか?私が理解

答えて

1

あなたはメールテンプレートリソースフォルダの下サブフォルダを持っています。

あなたのClassLoaderTemplateResolverでプレフィックスとしてリソースフォルダを追加することができます。次にメールテンプレートのサブフォルダに追加します。

ClassLoaderTemplateResolver

@Bean 
@Description("Thymeleaf template resolver serving HTML 5 emails") 
public ClassLoaderTemplateResolver emailTemplateResolver() { 
    ClassLoaderTemplateResolver emailTemplateResolver = new 
    ClassLoaderTemplateResolver(); 
    emailTemplateResolver.setPrefix("resources/"); 
    emailTemplateResolver.setSuffix(".html"); 
    emailTemplateResolver.setTemplateMode("HTML5"); 
    emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8); 
    emailTemplateResolver.setOrder(1); 
    return emailTemplateResolver; 
} 

置きますが、@SpringBootApplicationで注釈されているアプリケーションのクラス、中にあなたのResourceHandler方法。

return "mails/page1"; 

または

return "templates/page2"; 
+0

お返事をありがとう:あなたはあなたのビュー名は任意のメソッドから返された場合、それはのようにすることができ

public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!registry.hasMappingForPattern("/mails/**")) { registry.addResourceHandler("/mails/**").addResourceLocations("classpath:/resources/mails/"); } if (!registry.hasMappingForPattern("/templates/**")) { registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/resources/templates/"); } } 

ResourceHandler。私はこれがこれを実装する一つの方法だと思います。私は 'spring-boot-starter-thymeleaf:2.0.0.M3'でなぜ' templates'フォルダーが 'mails'フォルダーが指定されても無視されるのか、もっと興味があります。以前のバージョンでは、私は上記の私のコードに従って 'mails'テンプレートリゾルバを指定する必要があり、' templates'フォルダはデフォルトで含まれていました。新しいテンプレートリゾルバに 'templates'フォルダを追加すると、' mails'フォルダは無視されます。つまり、テンプレートリゾルバは1つだけ注入されます。これは2.xの「機能」かバグですか? – Jerry

関連する問題