如何从Thymeleaf 3.0.5中的数据库读取Thymeleaf模板?

我们将从Thymeleaf 2.1升级到3.0.5。我们当前的设置(升级之前)具有许多定义并存储在数据库表中的百里香模板。

当我们尝试升级到3.x时,我们的2.1代码不再起作用…好的,但是我们找不到关于如何使用Thymeleaf

3.0.5进行基本相同操作的任何好示例。有人实施过吗?

即使是关于如何实现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";

}

}

}

任何帮助表示赞赏…

回答:

通过大多数的反复试验,我得以将其拼凑起来。将其张贴在此处可帮助下一个寻找相似内容的人。

在新版本的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;

}

}

以上是 如何从Thymeleaf 3.0.5中的数据库读取Thymeleaf模板? 的全部内容, 来源链接: utcz.com/qa/429220.html

回到顶部