2017-04-24 78 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; 
    } 

}