Package freemarker.template
Interface ObjectWrapper
-
- All Known Subinterfaces:
ObjectWrapperAndUnwrapper
,ObjectWrapperWithAPISupport
,RichObjectWrapper
- All Known Implementing Classes:
BeansWrapper
,DefaultObjectWrapper
,JythonWrapper
,RhinoWrapper
,SimpleObjectWrapper
public interface ObjectWrapper
Maps Java objects to the type-system of FreeMarker Template Language (see theTemplateModel
interfaces). Thus this is what decides what parts of the Java objects will be accessible in the templates and how.For example, with a
BeansWrapper
both the items ofMap
and the JavaBean properties (the getters) of an object are accessible in template uniformly with themyObject.foo
syntax, where "foo" is the map key or the property name. This is because both kind of object is wrapped byBeansWrapper
into aTemplateHashModel
implementation that will callMap.get(Object)
or the getter method, transparently to the template language.
-
-
Field Summary
Fields Modifier and Type Field Description static ObjectWrapper
BEANS_WRAPPER
Deprecated.UseBeansWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.static ObjectWrapper
DEFAULT_WRAPPER
Deprecated.UseDefaultObjectWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.static ObjectWrapper
SIMPLE_WRAPPER
Deprecated.No replacement as it was seldom if ever used by anyone; this instance isn't read-only and thus can't be trusted.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description TemplateModel
wrap(java.lang.Object obj)
Makes aTemplateModel
out of a non-TemplateModel
object, usually by "wrapping" it into aTemplateModel
implementation that delegates to the original object.
-
-
-
Field Detail
-
BEANS_WRAPPER
@Deprecated static final ObjectWrapper BEANS_WRAPPER
Deprecated.UseBeansWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.AnObjectWrapper
that exposes the object methods and JavaBeans properties as hash elements, and has custom handling for JavaMap
-s,ResourceBundle
-s, etc. It doesn't treatNode
-s and Jython objects specially, however. As of 2.3.22, usingDefaultObjectWrapper
with itsincompatibleImprovements
property set to 2.3.22 (or higher) is recommended instead.
-
DEFAULT_WRAPPER
@Deprecated static final ObjectWrapper DEFAULT_WRAPPER
Deprecated.UseDefaultObjectWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.The legacy default object wrapper implementation, focusing on backward compatibility and out-of-the W3C DOM wrapping box extra features. SeeDefaultObjectWrapper
for more information.
-
SIMPLE_WRAPPER
@Deprecated static final ObjectWrapper SIMPLE_WRAPPER
Deprecated.No replacement as it was seldom if ever used by anyone; this instance isn't read-only and thus can't be trusted.Object wrapper that usesSimpleXXX
wrappers only. It behaves like theDEFAULT_WRAPPER
, but for objects that it does not know how to wrap as aSimpleXXX
it throws an exception. It makes no use of reflection-based exposure of anything, which may makes it a good candidate for security-restricted applications.
-
-
Method Detail
-
wrap
TemplateModel wrap(java.lang.Object obj) throws TemplateModelException
Makes aTemplateModel
out of a non-TemplateModel
object, usually by "wrapping" it into aTemplateModel
implementation that delegates to the original object.- Parameters:
obj
- The object to wrap into aTemplateModel
. If it already implementsTemplateModel
, it should just return the object as is. If it'snull
, the method should returnnull
(however,BeansWrapper
, has a legacy option for returning a null model object instead, but it's not a good idea).- Returns:
- a
TemplateModel
wrapper of the object passed in. To support un-wrapping, you may consider the return value to implementWrapperTemplateModel
andAdapterTemplateModel
. The default expectation is that theTemplateModel
isn't less thread safe than the wrapped object. If theObjectWrapper
returns less thread safe objects, that should be clearly documented, as it restricts how it can be used, like, then it can't be used to wrap "shared variables" (Configuration.setSharedVaribles(Map)
). - Throws:
TemplateModelException
-
-