2017-12-25 40 views
0

this tutorialに従うことで、Thymeleafテンプレートエンジンを使用してHTML電子メールを作成しようとしています。SpringTemplateEngine.processがファイルを読み込めません。

私はテンプレートの設定を作成しました:

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import java.nio.charset.StandardCharsets; 
import org.thymeleaf.spring5.SpringTemplateEngine; 
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; 
import org.thymeleaf.templatemode.TemplateMode; 


@Configuration 
public class ThymeleafTemplateConfiguration { 
    @Bean 
    public SpringTemplateEngine springTemplateEngine() { 
    SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.addTemplateResolver(htmlTemplateResolver()); 
    return templateEngine; 
    } 

    @Bean 
    public SpringResourceTemplateResolver htmlTemplateResolver(){ 
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); 
    templateResolver.setPrefix("/templates/"); 
    templateResolver.setSuffix(".html"); 
    templateResolver.setTemplateMode(TemplateMode.HTML); 
    templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); 
    return templateResolver; 
    } 
} 

とHTMLテンプレート:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <p>This is the body to be changed</p> 
    <p>This is a name: ${name}</p> 
</body> 
</html> 

は、それから私は、テンプレートを移入しよう:

むしろより取得入力されたテンプレート、私はちょうど私がプロセスに入れた最初のパラメータを取得しています:

>>> my name 

私は間違っていますか?なぜプロセスは、指定された接頭辞と接尾辞を持つファイルを読み込むのではなく、そのままパラメータを取りますか? (/templates/index.html)

+0

はあなたが投稿できる新しいインスタンスにつまり、あなたがbean作成と同じようaddTemplateResolverをこのインスタンスを作成します。あなたのプロジェクトの完全なディレクトリ構造ですか? – oak

答えて

0

この例では、SpringTemplateEngineという名前のBeanが作成されており、SpringResourceTemplateResolverが注入されていることに注意してください。

コードでは、作成したbeanを使用していません。代わりに、SpringTemplateEngineの新しいインスタンスを作成します。私の推測では、この新しいインスタンスはSpringResourceTemplateResolverを知らない。

二つの可能な修正

  1. Autowired豆の代わりに作成新しいインスタンス
+0

あなたはそうです、私はそれをAutowiredし、今はテンプレートファイルを読んでいます。 – shayelk

+0

@shayelkしかし、それはテンプレートにすべての既知の変数を印刷するのに役立つかもしれませんが、文脈から変数名に$ {name}を置き換えません。そのためには、https://stackoverflow.com/questions/31387526/list-all-available-model-attributes-in-thymeleaf – oak

+1

をチェックしてください。問題は実際にインラインメカニズムでした。 Thymeleafの文書に従って$ {name}ではなく[[$ {name}]]を使用するべきです。http://www.thymeleaf.org/doc/articles/thymeleaf3migration.html – shayelk

関連する問題