freemarker.ext.beans
Class CollectionModel

java.lang.Object
  extended by freemarker.ext.beans.BeanModel
      extended by freemarker.ext.beans.StringModel
          extended by freemarker.ext.beans.CollectionModel
All Implemented Interfaces:
WrapperTemplateModel, AdapterTemplateModel, TemplateCollectionModel, TemplateHashModel, TemplateHashModelEx, TemplateModel, TemplateScalarModel, TemplateSequenceModel

public class CollectionModel
extends StringModel
implements TemplateCollectionModel, TemplateSequenceModel

A special case of BeanModel that can wrap Java collections and that implements the TemplateCollectionModel in order to be usable in a <foreach> block.

Version:
$Id: CollectionModel.java,v 1.22 2003/06/03 13:21:32 szegedia Exp $
Author:
Attila Szegedi

Field Summary
 
Fields inherited from class freemarker.ext.beans.BeanModel
object, wrapper
 
Fields inherited from interface freemarker.template.TemplateModel
NOTHING
 
Fields inherited from interface freemarker.template.TemplateScalarModel
EMPTY_STRING
 
Constructor Summary
CollectionModel(java.util.Collection collection, BeansWrapper wrapper)
          Creates a new model that wraps the specified collection object.
 
Method Summary
 TemplateModel get(int index)
          Retrieves the i-th object from the collection, wrapped as a TemplateModel.
 boolean getSupportsIndexedAccess()
          Tells if get(int) will always fail for this object.
 TemplateModelIterator iterator()
          Retrieves a template model iterator that is used to iterate over the elements in this collection.
 int size()
           
 
Methods inherited from class freemarker.ext.beans.StringModel
getAsString
 
Methods inherited from class freemarker.ext.beans.BeanModel
get, getAdaptedObject, getWrappedObject, hasPlainGetMethod, invokeGenericGet, isEmpty, keys, keySet, toString, unwrap, values, wrap
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CollectionModel

public CollectionModel(java.util.Collection collection,
                       BeansWrapper wrapper)
Creates a new model that wraps the specified collection object.

Parameters:
collection - the collection object to wrap into a model.
wrapper - the BeansWrapper associated with this model. Every model has to have an associated BeansWrapper instance. The model gains many attributes from its wrapper, including the caching behavior, method exposure level, method-over-item shadowing policy etc.
Method Detail

get

public TemplateModel get(int index)
                  throws TemplateModelException
Retrieves the i-th object from the collection, wrapped as a TemplateModel.

Specified by:
get in interface TemplateSequenceModel
Returns:
the item at the specified index, or null if the index is out of bounds. Note that a null value is interpreted by FreeMarker as "variable does not exist", and accessing a missing variables is usually considered as an error in the FreeMarker Template Language, so the usage of a bad index will not remain hidden.
Throws:
TemplateModelException - if the index is out of bounds, or the underlying collection is not a List.

getSupportsIndexedAccess

public boolean getSupportsIndexedAccess()
Tells if get(int) will always fail for this object. As this object implements TemplateSequenceModel, get(int) should always work, but due to a design flaw, for non-List wrapped objects get(int) will always fail. This method exists to ease working this problem around.


iterator

public TemplateModelIterator iterator()
Description copied from interface: TemplateCollectionModel
Retrieves a template model iterator that is used to iterate over the elements in this collection.

Specified by:
iterator in interface TemplateCollectionModel

size

public int size()
Specified by:
size in interface TemplateHashModelEx
Specified by:
size in interface TemplateSequenceModel
Overrides:
size in class BeanModel
Returns:
the number of key/value mappings in the hash.