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

标签 java freemarker

在我的数据模型中,我有很多方法返回编码为 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/

相关文章:

java - 使用java执行复杂的进程命令行

xml - 如何使用 Java API 在 Marklogic 中搜索 XML 标签或 JSON 键

java - 从 freemarker 列表中获取最后一条记录

java - 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

java - 使用多个 View /布局时在 Android 中处理触摸事件

java - 扫描仪输入跳过下一个输入

java - 使用 Java 使用 morphia mongodb 查找地理空间

freemarker - 并且在 freemarker 中

java - authentication.getName() 在自定义 AuthenticationProvider 中返回 null

javascript - 如何在slickgrid中动态添加列?