2017-04-24 77 views
0

我們將從Thymeleaf 2.1升級到3.0.5。我們目前的設置(在升級之前)有許多thymeleaf模板定義並存儲在數據庫表中。
當我們嘗試升級到3.x時,我們的2.1代碼不再有效......沒問題,但是我們無法找到任何有關如何使用Thymeleaf 3.0.5做基本相同事情的好例子。有沒有人執行過這個?如何在Thymeleaf 3.0.5中從數據庫讀取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

只是爲了更好地理解你的問題,爲什麼你沒有在你的web應用程序中的HTML thymeleaf文件作爲一個普通的資源? – 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; 
    } 

}