[英]How do I get “Enum.CONSTANT” to return some type (e.g. Color)?
[英]In FreeMarker, how do I automatically convert a custom object (e.g. java.awt.Color) to a particular String value (e.g. HTML hex color)?
在我的数据模型中,我有很多方法可以返回编码为HTML颜色十六进制代码的颜色 (例如#8da6b1)。 如果这些方法可以简单地返回java.awt.Color并让FreeMarker对象包装程序处理转换,则它们将更加简单。 我需要在FreeMarker的配置中添加什么? 我需要编写自定义ObjectWrapper吗? 如果是这样,代码是什么?
更新:FreeMarker手册现在有一个更好(更高级)的例子来做这种事情: http : //freemarker.org/docs/pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample 。 重要的一点是,如果要在将Color
传递给模板中的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.XY)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.