IteratorModel (FreeMarker 2.3.35 API)
Description: declaration: package: freemarker.ext.beans, class: IteratorModel

Package freemarker.ext.beans

# Class IteratorModel

java.lang.Object
freemarker.ext.beans.BeanModel
freemarker.ext.beans.IteratorModel

All Implemented Interfaces:
  `WrapperTemplateModel`, `AdapterTemplateModel`, `TemplateCollectionModel`, `TemplateHashModel`, `TemplateHashModelEx`, `TemplateModel`, `TemplateModelIterator`, `TemplateModelWithAPISupport`

public class IteratorModel extends BeanModel implements TemplateModelIterator, TemplateCollectionModel

A class that adds `TemplateModelIterator` functionality to the `Iterator` interface implementers.

It differs from the `SimpleCollection` in that it inherits from `BeanModel`, and therefore you can call methods on it directly, even to the effect of calling `iterator.remove()` in the template.

Using the model as a collection model is NOT thread-safe, as iterators are inherently not thread-safe. Further, you can iterate over it only once. Attempts to call the `iterator()` method after it was already driven to the end once will throw an exception.

- ## Field Summary

  ### Fields inherited from class freemarker.ext.beans.BeanModel

  `object, wrapper`

  ### Fields inherited from interface freemarker.template.TemplateModel

  `NOTHING`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IteratorModel​(Iterator iterator, BeansWrapper wrapper)`
  Creates a new model that wraps the specified iterator object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `getAsBoolean()`
  Returns `Iterator.hasNext()`.
  `boolean`
  `hasNext()`
  Calls underlying `Iterator.hasNext()`.
  `TemplateModelIterator`
  `iterator()`
  This allows the iterator to be used in a `<#list>` block.
  `TemplateModel`
  `next()`
  Calls underlying `Iterator.next()` and wraps the result.

  ### Methods inherited from class freemarker.ext.beans.BeanModel

  `get, get, getAdaptedObject, getAPI, getBeforeMethodCall, getWrappedObject, hasPlainGetMethod, invokeGenericGet, isEmpty, keys, keySet, size, toString, unwrap, values, wrap`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### IteratorModel

    public IteratorModel​(Iterator iterator, BeansWrapper wrapper)
    Creates a new model that wraps the specified iterator object.
    Parameters:
      `iterator` - the iterator 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 Details

  - ### iterator

    public TemplateModelIterator iterator() throws TemplateModelException
    This allows the iterator to be used in a `<#list>` block.
    Specified by:
      `iterator` in interface `TemplateCollectionModel`
    Returns:
      "this"
    Throws:
      `TemplateModelException`

  - ### hasNext

    public boolean hasNext()
    Calls underlying `Iterator.hasNext()`.
    Specified by:
      `hasNext` in interface `TemplateModelIterator`
    Returns:
      whether there are any more items to iterate over.

  - ### next

    public TemplateModel next() throws TemplateModelException
    Calls underlying `Iterator.next()` and wraps the result.
    Specified by:
      `next` in interface `TemplateModelIterator`
    Throws:
      `TemplateModelException` - if the next model can not be retrieved (i.e. because the iterator is exhausted).

  - ### getAsBoolean

    public boolean getAsBoolean()
    Returns `Iterator.hasNext()`. Therefore, an iterator that has no more element evaluates to false, and an iterator that has further elements evaluates to true.