freemarker.ext.beans (FreeMarker 2.3.23 API)
Date: 2015-07-05

# Package freemarker.ext.beans

The `default object wrapper` of FreeMarker uses this to expose Java Beans and POJO-s to templates, but it can also be used in itself as a better alternative `ObjectWrapper`.

See: Description

- Interface Summary
  Interface | Description
  --- | ---
  MethodAppearanceFineTuner | Used for customizing how the methods are visible from templates, via `BeansWrapper.setMethodAppearanceFineTuner(MethodAppearanceFineTuner)`.
  SingletonCustomizer | Marker interface useful when used together with `MethodAppearanceFineTuner` and such customizer objects, to indicate that it doesn't contain reference to the `ObjectWrapper` (so beware with non-static inner classes) and can be and should be used in call introspection cache keys.

- Class Summary
  Class | Description
  --- | ---
  ArrayModel | A class that will wrap an arbitrary array into `TemplateCollectionModel` and `TemplateSequenceModel` interfaces.
  BeanModel | A class that will wrap an arbitrary object into `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.
  BeansModelCache |
  BeansWrapper | `ObjectWrapper` that is able to expose the Java API of arbitrary Java objects.
  BeansWrapper.MethodAppearanceDecision | Experimental class; subject to change! Used for `MethodAppearanceFineTuner.process(freemarker.ext.beans.BeansWrapper.MethodAppearanceDecisionInput, freemarker.ext.beans.BeansWrapper.MethodAppearanceDecision)` to store the results; see there.
  BeansWrapper.MethodAppearanceDecisionInput | Experimental class; subject to change! Used for `MethodAppearanceFineTuner.process(freemarker.ext.beans.BeansWrapper.MethodAppearanceDecisionInput, freemarker.ext.beans.BeansWrapper.MethodAppearanceDecision)` as input parameter; see there.
  BeansWrapperBuilder | Gets/creates a `BeansWrapper` singleton instance that's already configured as specified in the properties of this object; this is recommended over using the `BeansWrapper` constructors.
  BeansWrapperConfiguration | Holds `BeansWrapper` configuration settings and defines their defaults.
  BooleanModel | A class that will wrap instances of `Boolean` into a `TemplateBooleanModel`.
  CollectionModel | A special case of `BeanModel` that can wrap Java collections and that implements the `TemplateCollectionModel` in order to be usable in a `<#list>` block.
  DateModel | Wraps arbitrary subclass of `Date` into a reflective model.
  EnumerationModel | A class that adds `TemplateModelIterator` functionality to the `Enumeration` interface implementers.
  HashAdapter |
  IteratorModel | A class that adds `TemplateModelIterator` functionality to the `Iterator` interface implementers.
  MapModel | A special case of `BeanModel` that adds implementation for `TemplateMethodModelEx` on map objects that is a shortcut for the `Map.get()` method.
  NumberModel | Wraps arbitrary subclass of `Number` into a reflective model.
  OverloadedMethodsModel | Wraps a set of same-name overloaded methods behind `TemplateMethodModel` interface, like if it was a single method, chooses among them behind the scenes on call-time based on the argument values.
  ResourceBundleModel | A hash model that wraps a resource bundle.
  SimpleMapModel | Model used by `BeansWrapper` when `simpleMapWrapper` mode is enabled.
  SimpleMethodModel | A class that will wrap a reflected method call into a `TemplateMethodModel` interface.
  StringModel | Subclass of `BeanModel` that exposes the return value of the `Object.toString()` method through the `TemplateScalarModel` interface.

- Exception Summary
  Exception | Description
  --- | ---
  InvalidPropertyException | An exception thrown when there is an attempt to access an invalid bean property when we are in a "strict bean" mode

## Package freemarker.ext.beans Description

The `default object wrapper` of FreeMarker uses this to expose Java Beans and POJO-s to templates, but it can also be used in itself as a better alternative `ObjectWrapper`.

Most of the issues dealing with beans are handled by the `BeansWrapper.wrap(Object)`and `BeansWrapper.getStaticModels()` methods. In normal cases, these are the only methods you should use to turn an arbitrary Java object into a FreeMarker `TemplateModel`. Additionally, you can manually create instance of any wrapper class using its constructors. Note, however that in such cases you bypass the eventual model caching of the wrapper.