2017-04-24 21 views
0

Thymeleaf 2.1から3.0.5にアップグレードしています。私たちの現在のセットアップ(アップグレード前)には、多くのthymeleafテンプレートが定義され、データベーステーブルに格納されています。
3.xにアップグレードしようとすると、2.1のコードは機能しなくなりました...でも問題ありませんが、基本的にThymeleaf 3.0.5で同じことを行う良い例は見つかりません。誰もこれを実装していますか?Thymeleaf 3.0.5のDBからThymeleafテンプレートを読み取る方法は?

org.thymeleaf.templateresolver.StringTemplateResolverを実装する方法のまともな例でも、おそらく正しい方向に私たちを押し込むでしょう...しかし、私たちはそれについて何も見つけることができません。

これは、我々は2.1で使用したものである:すべてのヘルプは高く評価され

public class ThymeleafTemplateResolver extends TemplateResolver { 

    private final static String PREFIX = ""; 

    public ThymeleafTemplateResolver() { 
     setResourceResolver(new DbResourceResolver()); 
     setResolvablePatterns(Sets.newHashSet(PREFIX + "*")); 
    } 

    @Override 
    protected String computeResourceName(TemplateProcessingParameters params) { 
     String templateName = params.getTemplateName(); 
     return templateName.substring(PREFIX.length()); 
    } 

    private class DbResourceResolver implements IResourceResolver { 

     @Override 
     public InputStream getResourceAsStream(TemplateProcessingParameters params, String template) { 
      ThymeleafTemplateDao thymeleaftemplateDao = ApplicationContextProvider.getApplicationContext().getBean(ThymeleafTemplateDao.class); 
      ThymeleafTemplate thymeleafTemplate = thymeleaftemplateDao.findByTemplate(template); 
      if (thymeleafTemplate != null) { 
       return new ByteArrayInputStream(thymeleafTemplate.getContent().getBytes()); 
      } 
      return null; 
     } 

     @Override 
     public String getName() { 
      return "dbResourceResolver"; 
     } 
    } 
} 

...

+0

あなたの問題をよりよく理解しようとするにはどうすればいいですか?html thymeleafファイルを通常のリソースとしてWebapp内に持っていないのはなぜですか? – cralfaro

+0

これは長い話です。クレイジーになって、少なくともデータベースの一部をテンプレートで利用できるようにする必要があるとしましょう。 – kasdega

+0

Thymleafeキャッシュは無効になっていますか? –

答えて

0

ほとんどが試行錯誤の末、私は一緒にこれをつなぎすることができました。類似のものを探して次の人を助けるためにここに掲示する。

これは、新しいバージョンのThymeleafでより簡単になりました。現在、StringTemplateResolverを拡張するだけです。

import java.util.Map; 
import org.thymeleaf.IEngineConfiguration; 
import org.thymeleaf.templateresolver.StringTemplateResolver; 
import org.thymeleaf.templateresource.ITemplateResource; 

import com.google.common.collect.Sets; 

public class ThymeleafDatabaseResourceResolver extends StringTemplateResolver { 
    private final static String PREFIX = ""; 

    @Autowired ThymeleafTemplateDao thymeleaftemplateDao; 

    public ThymeleafDatabaseResourceResolver() { 
     setResolvablePatterns(Sets.newHashSet(PREFIX + "*")); 
    } 

    @Override 
    protected ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String, Object> templateResolutionAttributes) { 

     // ThymeleafTemplate is our internal object that contains the content. 
     // You should change this to match you're set up. 

     ThymeleafTemplateDao thymeleaftemplateDao = ApplicationContextProvider.getApplicationContext().getBean(ThymeleafTemplateDao.class); 
     ThymeleafTemplate thymeleafTemplate = thymeleaftemplateDao.findByTemplateName(template); 
     if (thymeleafTemplate != null) { 
      return super.computeTemplateResource(configuration, ownerTemplate, thymeleafTemplate.getContent(), templateResolutionAttributes); 
     } 
     return null; 
    } 

}