在我的数据模型中,我有很多方法返回编码为 HTML color hex code 的颜色。 (例如#8da6b1)。如果这些方法可以简单地返回java.awt.Color,那么它们会简单得多。并让 FreeMarker 对象包装器负责转换。我需要在 FreeMarker 的配置中添加什么?我需要编写自定义 ObjectWrapper 吗?如果是的话,代码是什么?
最佳答案
更新:FreeMarker 手册现在有一个更好(更高级)的示例来执行此类操作:http://freemarker.org/docs/pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample 。重要的一点是,如果您想在将颜色传递给模板中的 Java 方法时取回您的 Color
(与 String
相反),那么您可以实现 AdapterTemplateModel
,因此 SimpleScalar
还不够好。
扩展DefaultObjectWrapper
(或您正在使用的任何ObjectWrapper
):
@Override
protected TemplateModel handleUnknownType(Object obj) throws TemplateModelException {
if (obj instanceof Color) {
return new SimpleScalar(toHTMLHexCode((Color) obj));
}
return super.handleUnknownType(obj);
}
其中实现 toHTMLHexCode
的工作由您决定。然后,在设置 Configuration
单例的位置,执行 cfg.setObjectWrapper(new YourObjectWrapper(Configuration.VERSION_2_X_Y))
,或者如果您从 Properties
配置 FreeMarker >,然后 object_wrapper=com.example.YourObjectWrapper(2.X.Y)
关于java - 在 FreeMarker 中,如何自动将自定义对象(例如 java.awt.Color)转换为特定的字符串值(例如 HTML 十六进制颜色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253011/