java - 我的 Freemarker ObjectWrapper 如何访问模板设置
问题描述
用例:系统管理员将 Freemarker 模板存储在数据库中,该模板用于(由 Spring Boot REST API)以区域设置感知方式将系统用户(响应者)存储的信息呈现给不同的用户类型(审阅者)。
受访者的回答可能存储在此类对象中(或此类对象的列表中,如果向受访者提出的问题预计会有多个答案):
// snip
import com.fasterxml.jackson.databind.node.ObjectNode;
// more imports snipped
public class LanguageStringMap {
private Map<Language, String> languageStringMap;
public LanguageStringMap(ObjectNode languageMapNode) {
// snip of code instantiating a LanguageStringMap from JSON
}
public void put(Language language, String value) {
if (value.length() == 0)
throw new IllegalArgumentException(String.format(
"value for language '%s' of zero length", language.getCode()));
languageStringMap.put(language, value);
}
public String get(Language language) { return languageStringMap.get(language); }
}
我想我想要做的是编写一个 ObjectWrapper ,它将实例映射LanguageStringMap
到一个字符串(通过get()
使用从审阅者的浏览器请求的语言环境派生的语言调用该方法并在模板的设置中设置)。与使上传的模板包含一堆模板方法调用相比,这为系统管理员提供了更清晰的用户体验。
为此,我的对象包装器需要访问模板设置。我已经仔细阅读了相关的 Freemarker 文档,但我仍然不清楚如何做到这一点,甚至是否可能。
我认为尝试通过将资源包与模板一起上传到数据库来实现这一点是错误的,但这是一个考虑因素。
解决方案
通常,您只需在处理模板之前将特定于语言环境的字符串与所有其他变量一起放入数据模型中。在这种情况下,不需要ObjectWrapper
定制。但是,如果您必须使用基于 -的ObjectWrapper
解决方案,那么您可以使用.ObjectWrapper
DefaultObjectWrapper.handleUnknownType
Environment.getCurrentEnvironment().getLocale()
推荐阅读
- kubernetes - 在 localhost 上运行的 Kubernetes 服务
- go - 没有ticker.Stop()的代码
- oauth-2.0 - 在 Postman 中使用 Raw 格式测试 Google API OAuth2 时出现错误“java.security.SignatureException: Invalid signature for token”
- java - ArchUnit 似乎没有缓存分析的类
- java - 比较 java.sql.timestamp 值
- javascript - 如何以 json 或任何其他文件格式保存数据以供 JavaScript 进一步使用
- python - 即使登录对 Django Admin 有效,Django 登录也会说密码无效,即使登录凭据正确
- javascript - 三.js设置环境贴图模型覆盖自己的纹理
- flutter - Flutter npm flutter_bloc 迁移到 6.1.1
- python - 熊猫:拆分值并跨列连接