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 the
TemplateModel
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 of Map
and the JavaBean properties (the getters)
of an object are accessible in template uniformly with the myObject.foo
syntax, where "foo" is the map key or
the property name. This is because both kind of object is wrapped by BeansWrapper
into a
TemplateHashModel
implementation that will call Map.get(Object)
or the getter method, transparently
to the template language.
-
Field Summary
Modifier and TypeFieldDescriptionstatic ObjectWrapper
Deprecated.static ObjectWrapper
Deprecated.UseDefaultObjectWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.static ObjectWrapper
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
Modifier and TypeMethodDescriptionMakes aTemplateModel
out of a non-TemplateModel
object, usually by "wrapping" it into aTemplateModel
implementation that delegates to the original object.
-
Field Details
-
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.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.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 Details
-
wrap
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
-
BeansWrapperBuilder.build()
instead; this instance isn't read-only and thus can't be trusted.