freemarker.ext.jython
包包含了启用任意Jython对象的模型,
并被用作是TemplateModel
。在一个基础的示例中,
你可以使用如下调用:
public TemplateModel wrap(Object obj);
freemarker.ext.jython.JythonWrapper
类的方法。
这个方法会包装传递的对象,包装成合适的 TemplateModel
。
下面是一个对返回对象包装器的属性的总结。为了下面的讨论,
我们假设在模板模型根中,对对象 obj
调用
JythonWrapper
后模型名为 model
。
模板哈希表模型功能(TemplateHashModel functionality)
PyDictionary
和
PyStringMap
将会被包装成一个哈希表模型。
键的查找映射到 __finditem__
方法;如果一个项没有被找到,
那么就返回一个为 None
的模型。
模板标量模型功能(TemplateScalarModel functionality)
每一个python对象会实现
TemplateScalarModel
接口,
其中的 getAsString()
方法会委派给 toString()
方法。
模板布尔值模型功能(TemplateBooleanModel functionality)
每一个python对象会实现
TemplateBooleanModel
接口,
其中的 getAsBoolean()
方法会指派给
__nonzero__()
方法,
符合Python语义的true/false。
模板数字模型功能(TemplateNumberModel functionality)
对PyInteger
,PyLong
和
PyFloat
对象的模型包装器实现了
TemplateNumberModel
接口,其中的
getAsNumber()
方法返回
__tojava__(java.lang.Number.class)
。
模板序列模型功能(TemplateSequenceModel functionality)
对所有扩展了 PySequence
的类的模型包装器会实现
TemplateSequenceModel
接口,
因此它们中的元素可以通过使用 model[i]
语法形式的序列来访问,
这会指派给__finditem__(i)
。你也可以使用内建函数
model?size
查询数组的长度或者list的大小,
它会指派给 __len__()
。