Jython包装器

freemarker.ext.jython 包包含了启用任意Jython对象的模型, 并被用作是TemplateModel。在一个基础的示例中, 你可以使用如下调用:

public TemplateModel wrap(Object obj);

freemarker.ext.jython.JythonWrapper 类的方法。 这个方法会包装传递的对象,包装成合适的 TemplateModel。 下面是一个对返回对象包装器的属性的总结。为了下面的讨论, 我们假设在模板模型根中,对对象 obj 调用 JythonWrapper 后模型名为 model

模板哈希表模型功能(TemplateHashModel functionality)

PyDictionaryPyStringMap 将会被包装成一个哈希表模型。 键的查找映射到 __finditem__ 方法;如果一个项没有被找到, 那么就返回一个为 None 的模型。

模板标量模型功能(TemplateScalarModel functionality)

每一个python对象会实现 TemplateScalarModel 接口, 其中的 getAsString() 方法会委派给 toString() 方法。

模板布尔值模型功能(TemplateBooleanModel functionality)

每一个python对象会实现 TemplateBooleanModel 接口, 其中的 getAsBoolean() 方法会指派给 __nonzero__() 方法, 符合Python语义的true/false。

模板数字模型功能(TemplateNumberModel functionality)

PyIntegerPyLongPyFloat 对象的模型包装器实现了 TemplateNumberModel 接口,其中的 getAsNumber() 方法返回 __tojava__(java.lang.Number.class)

模板序列模型功能(TemplateSequenceModel functionality)

对所有扩展了 PySequence 的类的模型包装器会实现 TemplateSequenceModel 接口, 因此它们中的元素可以通过使用 model[i] 语法形式的序列来访问, 这会指派给__finditem__(i)。你也可以使用内建函数 model?size 查询数组的长度或者list的大小, 它会指派给 __len__()