繁体   English   中英

在FreeMarker中,如何自动将自定义对象(例如java.awt.Color)转换为特定的String值(例如HTML十六进制颜色)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM