| java.lang.Object freemarker.ext.beans.BeanModel
All known Subclasses: freemarker.ext.beans.IteratorModel, freemarker.ext.beans.BooleanModel, freemarker.ext.beans.EnumerationModel, freemarker.ext.beans.ArrayModel, freemarker.ext.beans.ResourceBundleModel, freemarker.ext.beans.StringModel, freemarker.ext.beans.DateModel, freemarker.ext.beans.NumberModel,
BeanModel | public class BeanModel implements TemplateHashModelEx,AdapterTemplateModel,WrapperTemplateModel(Code) | | A class that will wrap an arbitrary object into
freemarker.template.TemplateHashModel interface allowing calls to arbitrary property getters and invocation of
accessible methods on the object from a template using the
object.foo to access properties and object.bar(arg1, arg2) to
invoke methods on it. You can also use the object.foo[index] syntax to
access indexed properties. It uses Beans
java.beans.Introspector to dynamically discover the properties and methods.
author: Attila Szegedi version: $Id: BeanModel.java,v 1.49.2.4 2006/11/12 10:20:37 szegedia Exp $ |
BeanModel | public BeanModel(Object object, BeansWrapper wrapper)(Code) | | Creates a new model that wraps the specified object. Note that there are
specialized subclasses of this class for wrapping arrays, collections,
enumeration, iterators, and maps. Note also that the superclass can be
used to wrap String objects if only scalar functionality is needed. You
can also choose to delegate the choice over which model class is used for
wrapping to
BeansWrapper.wrap(Object) .
Parameters: object - the object to wrap into a model. Parameters: wrapper - the BeansWrapper associated with this model.Every model has to have an associated BeansWrapper instance. Themodel gains many attributes from its wrapper, including the caching behavior, method exposure level, method-over-item shadowing policy etc. |
get | public TemplateModel get(String key) throws TemplateModelException(Code) | | Uses Beans introspection to locate a property or method with name
matching the key name. If a method or property is found, it is wrapped
into
freemarker.template.TemplateMethodModelEx (for a method or
indexed property), or evaluated on-the-fly and the return value wrapped
into appropriate model (for a simple property) Models for various
properties and methods are cached on a per-class basis, so the costly
introspection is performed only once per property or method of a class.
(Side-note: this also implies that any class whose method has been called
will be strongly referred to by the framework and will not become
unloadable until this class has been unloaded first. Normally this is not
an issue, but can be in a rare scenario where you create many classes on-
the-fly. Also, as the cache grows with new classes and methods introduced
to the framework, it may appear as if it were leaking memory. The
framework does, however detect class reloads (if you happen to be in an
environment that does this kind of things--servlet containers do it when
they reload a web application) and flushes the cache. If no method or
property matching the key is found, the framework will try to invoke
methods with signature
non-void-return-type get(java.lang.String),
then non-void-return-type get(java.lang.Object), or
alternatively (if the wrapped object is a resource bundle)
Object getObject(java.lang.String).
throws: TemplateModelException - if there was no property nor method nora generic get method to invoke. |
hasPlainGetMethod | protected boolean hasPlainGetMethod()(Code) | | Whether the model has a plain get(String) or get(Object) method
|
isEmpty | public boolean isEmpty()(Code) | | Tells whether the model is empty. It is empty if either the wrapped
object is null, or it is a Boolean with false value.
|
keySet | protected Set keySet()(Code) | | Helper method to support TemplateHashModelEx. Returns the Set of
Strings which are available via the TemplateHashModel
interface. Subclasses that override invokeGenericGet to
provide additional hash keys should also override this method.
|
|
|