Prev Class | Next Class | Frames | No Frames |
Summary: Nested | Field | Method | Constr | Detail: Nested | Field | Method | Constr |
java.lang.Object
freemarker.ext.beans.BeansWrapper
wrap(Object)
and unwrap(TemplateModel)
methods.
Field Summary | |
static int |
|
static int |
|
static int |
|
static int |
|
Fields inherited from interface freemarker.template.ObjectWrapper | |
BEANS_WRAPPER , DEFAULT_WRAPPER , SIMPLE_WRAPPER |
Constructor Summary | |
|
Method Summary | |
static void |
|
protected TemplateModel |
|
protected int | |
static BeansWrapper |
|
TemplateHashModel |
|
protected TemplateModel |
|
ObjectWrapper |
|
TemplateHashModel |
|
boolean | |
boolean | |
boolean |
|
Object |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
Object |
|
Object |
|
TemplateModel |
|
public static final int EXPOSE_ALL
At this level of exposure, all methods and properties of the wrapped objects are exposed to the template.
- Field Value:
- 0
public static final int EXPOSE_NOTHING
At this level of exposure, no bean properties and methods are exposed. Only map items, resource bundle items, and objects retrieved through the generic get method (on objects of classes that have a generic get method) can be retrieved through the hash interface. You might want to callsetMethodsShadowItems(boolean)
with false value to speed up map item retrieval.
- Field Value:
- 3
public static final int EXPOSE_PROPERTIES_ONLY
At this level of exposure, only property getters are exposed. Additionally, property getters that map to unsafe methods are not exposed (i.e. Class.classLoader and Thread.contextClassLoader).
- Field Value:
- 2
public static final int EXPOSE_SAFE
At this level of exposure, all methods and properties of the wrapped objects are exposed to the template except methods that are deemed not safe. The not safe methods are java.lang.Object methods wait() and notify(), java.lang.Class methods getClassLoader() and newInstance(), java.lang.reflect.Method and java.lang.reflect.Constructor invoke() and newInstance() methods, all java.lang.reflect.Field set methods, all java.lang.Thread and java.lang.ThreadGroup methods that can change its state, as well as the usual suspects in java.lang.System and java.lang.Runtime.
- Field Value:
- 1
public BeansWrapper()
Creates a new instance of BeansWrapper. The newly created instance will use the null reference as its null object, it will useEXPOSE_SAFE
method exposure level, and will not cache model instances.
public static void coerceBigDecimals(AccessibleObject callable, Object[] args)
Converts anyBigDecimal
s in the passed array to the type of the corresponding formal argument of the method.
protected int getDefaultDateType()
public static final BeansWrapper getDefaultInstance()
Returns the default instance of the wrapper. This instance is used when you construct various bean models without explicitly specifying a wrapper. It is also returned byObjectWrapper.BEANS_WRAPPER
and this is the sole instance that is used by the JSP adapter. You can modify the properties of the default instance (caching, exposure level, null model) to affect its operation. By default, the default instance is not caching, uses theEXPOSE_SAFE
exposure level, and uses null reference as the null model.
public TemplateHashModel getEnumModels()
Returns a hash model that represents the so-called class enum models. Every class' enum model is itself a hash through which you can access enum value declared by the specified class, assuming that class is an enumeration. To obtain an enum model for a class, get the element of this hash with the fully qualified class name. For example, if you place this hash model inside the root data model under name "enums", you can use i.e.statics["java.math.RoundingMode"].UP
to access thejava.math.RoundingMode.UP
value.
- Returns:
- a hash model whose keys are fully qualified class names, and that returns hash models whose elements are the enum models of the classes.
public ObjectWrapper getOuterIdentity()
By default returns this.
- See Also:
setOuterIdentity(ObjectWrapper)
public TemplateHashModel getStaticModels()
Returns a hash model that represents the so-called class static models. Every class static model is itself a hash through which you can call static methods on the specified class. To obtain a static model for a class, get the element of this hash with the fully qualified class name. For example, if you place this hash model inside the root data model under name "statics", you can use i.e.statics["java.lang. System"]. currentTimeMillis()
to call thejava.lang.System.currentTimeMillis()
method.
- Returns:
- a hash model whose keys are fully qualified class names, and that returns hash models whose elements are the static models of the classes.
public boolean isExposeFields()
public boolean isSimpleMapWrapper()
public void setDefaultDateType(int defaultDateType)
Sets the default date type to use for date models that result from a plain java.util.Date instead of java.sql.Date or java.sql.Time or java.sql.Timestamp. Default value isTemplateDateModel.UNKNOWN
.
- Parameters:
defaultDateType
- the new default date type.
public void setExposeFields(boolean exposeFields)
public void setExposureLevel(int exposureLevel)
Sets the method exposure level. By default, set toEXPOSE_SAFE
.
- Parameters:
exposureLevel
- can be any of theEXPOSE_xxx
constants.
public void setMethodsShadowItems(boolean methodsShadowItems)
Sets whether methods shadow items in beans. When true (this is the default value),${object.name}
will first try to locate a bean method or property with the specified name on the object, and only if it doesn't find it will it try to callobject.get(name)
, the so-called "generic get method" that is usually used to access items of a container (i.e. elements of a map). When set to false, the lookup order is reversed and generic get method is called first, and only if it returns null is method lookup attempted.
public void setNullModel(TemplateModel nullModel)
Sets the null model. This model is returned from thewrap(Object)
method whenever the underlying object reference is null. It defaults to null reference, which is dealt with quite strictly on engine level, however you can substitute an arbitrary (perhaps more lenient) model, such asTemplateScalarModel.EMPTY_STRING
.
public void setOuterIdentity(ObjectWrapper outerIdentity)
When wrapping an object, the BeansWrapper commonly needs to wrap "sub-objects", for example each element in a wrapped collection. Normally it wraps these objects using itself. However, this makes it difficult to delegate to a BeansWrapper as part of a custom aggregate ObjectWrapper. This method lets you set the ObjectWrapper which will be used to wrap the sub-objects.
- Parameters:
outerIdentity
- the aggregate ObjectWrapper
public void setSimpleMapWrapper(boolean simpleMapWrapper)
By default the BeansWrapper wraps classes implementing java.util.Map usingMapModel
. Setting this flag will cause it to use aSimpleMapModel
instead. The biggest difference is that when using aSimpleMapModel
, the map will be visible asTemplateHashModelEx
, and the subvariables will be the content of the map, without the other methods and properties of the map object.
- Parameters:
simpleMapWrapper
- enable simple map wrapping
public void setStrict(boolean strict)
Specifies if an attempt to read a bean property that doesn't exist in the wrapped object should throw anInvalidPropertyException
. If this property is false (the default) then an attempt to read a missing bean property is the same as reading an existing bean property whose value is null. The template can't tell the difference, and thus always can use ?default('something') and ?exists and similar built-ins to handle the situation. If this property is true then an attempt to read a bean propertly in the template (like myBean.aProperty) that doesn't exist in the bean object (as opposed to just holding null value) will causeInvalidPropertyException
, which can't be suppressed in the template (not even with myBean.noSuchProperty?default('something')). This way ?default('something') and ?exists and similar built-ins can be used to handle existing properties whose value is null, without the risk of hiding typos in the property names. Typos will always cause error. But mind you, it goes against the basic approach of FreeMarker, so use this feature only if you really know what are you doing.
public void setUseCache(boolean useCache)
Sets whether this wrapper caches model instances. Default is false. When set to true, callingwrap(Object)
multiple times for the same object will likely return the same model (although there is no guarantee as the cache items can be cleared anytime).
public Object unwrap(TemplateModel model) throws TemplateModelException
Attempts to unwrap a model into underlying object. Generally, this method is the inverse of thewrap(Object)
method. In addition it will unwrap arbitraryTemplateNumberModel
instances into a number, arbitraryTemplateDateModel
instances into a date,TemplateScalarModel
instances into a String, andTemplateBooleanModel
instances into a Boolean. All other objects are returned unchanged.
public TemplateModel wrap(Object object) throws TemplateModelException
Wraps the object with a template model that is most specific for the object's class. Specifically:
- if the object is null, returns the
null model
,- if the object is a Number returns a
NumberModel
for it,- if the object is a Date returns a
DateModel
for it,- if the object is a Boolean returns
TemplateBooleanModel.TRUE
orTemplateBooleanModel.FALSE
- if the object is already a TemplateModel, returns it unchanged,
- if the object is an array, returns a
ArrayModel
for it- if the object is a Map, returns a
MapModel
for it- if the object is a Collection, returns a
CollectionModel
for it- if the object is an Iterator, returns a
IteratorModel
for it- if the object is an Enumeration, returns a
EnumerationModel
for it- if the object is a String, returns a
StringModel
for it- otherwise, returns a generic
BeanModel
for it.
- Specified by:
- wrap in interface ObjectWrapper