gpt4 book ai didi

java - 如何在 Thymeleaf 3.0.5 中从 DB 读取 Thymeleaf 模板?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:00 25 4
gpt4 key购买 nike

我们正在从 Thymeleaf 2.1 升级到 3.0.5。我们当前的设置(升级前)定义了许多 thymeleaf 模板并存储在数据库表中。
当我们尝试升级到 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;
}

}

关于java - 如何在 Thymeleaf 3.0.5 中从 DB 读取 Thymeleaf 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com