Class Foreach
- java.lang.Object
-
- org.apache.velocity.runtime.directive.Directive
-
- org.apache.velocity.runtime.directive.Foreach
-
- All Implemented Interfaces:
java.lang.Cloneable
,DirectiveConstants
- Direct Known Subclasses:
For
public class Foreach extends Directive
Foreach directive used for moving through arrays, or objects that provide an Iterator.- Version:
- $Id$
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
elementKey
The reference name used to access each of the elements in the list object.private int
maxNbrLoops
The maximum number of times we're allowed to loop.private boolean
skipInvalidIterator
Whether or not to throw an Exception if the iterator is null.protected Info
uberInfo
immutable, so create in init-
Fields inherited from interface org.apache.velocity.runtime.directive.DirectiveConstants
BLOCK, LINE
-
-
Constructor Summary
Constructors Constructor Description Foreach()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
checkArgs(java.util.ArrayList<java.lang.Integer> argtypes, Token t, java.lang.String templateName)
We do not allow a word token in any other arg position except for the 2nd since we are looking for the pattern #foreach($foo in $bar).protected void
clean(InternalContextAdapter context, java.lang.Object o)
protected java.util.Iterator
getIterator(java.lang.Object iterable, Node node)
Retrieve the contextual iterator.java.lang.String
getName()
Return name of this directive.int
getType()
Return type of this directive.void
init(RuntimeServices rs, InternalContextAdapter context, Node node)
simple init - init the tree and get the elementKey from the ASTprotected void
put(InternalContextAdapter context, java.lang.String key, java.lang.Object value)
Extension hook to allow subclasses to control whether loop vars are set locally or not.boolean
render(InternalContextAdapter context, java.io.Writer writer, Node node)
renders the #foreach() blockprotected void
renderBlock(InternalContextAdapter context, java.io.Writer writer, Node block)
-
Methods inherited from class org.apache.velocity.runtime.directive.Directive
getColumn, getLine, getScopeName, getTemplate, getTemplateName, isScopeProvided, makeScope, postRender, preRender, setLocation, setLocation
-
-
-
-
Field Detail
-
maxNbrLoops
private int maxNbrLoops
The maximum number of times we're allowed to loop.
-
skipInvalidIterator
private boolean skipInvalidIterator
Whether or not to throw an Exception if the iterator is null.
-
elementKey
private java.lang.String elementKey
The reference name used to access each of the elements in the list object. It is the $item in the following: #foreach ($item in $list) This can be used class wide because it is immutable.
-
uberInfo
protected Info uberInfo
immutable, so create in init
-
-
Method Detail
-
getName
public java.lang.String getName()
Return name of this directive.
-
getType
public int getType()
Return type of this directive.
-
init
public void init(RuntimeServices rs, InternalContextAdapter context, Node node) throws TemplateInitException
simple init - init the tree and get the elementKey from the AST- Overrides:
init
in classDirective
- Parameters:
rs
-context
-node
-- Throws:
TemplateInitException
-
put
protected void put(InternalContextAdapter context, java.lang.String key, java.lang.Object value)
Extension hook to allow subclasses to control whether loop vars are set locally or not. So, those in favor of VELOCITY-285, can make that happen easily by overriding this and having it use context.localPut(k,v). See VELOCITY-630 for more on this.- Parameters:
context
-key
-value
-
-
getIterator
protected java.util.Iterator getIterator(java.lang.Object iterable, Node node)
Retrieve the contextual iterator.- Parameters:
iterable
-node
-- Returns:
- iterator
-
render
public boolean render(InternalContextAdapter context, java.io.Writer writer, Node node) throws java.io.IOException
renders the #foreach() block
-
renderBlock
protected void renderBlock(InternalContextAdapter context, java.io.Writer writer, Node block) throws java.io.IOException
- Throws:
java.io.IOException
-
clean
protected void clean(InternalContextAdapter context, java.lang.Object o)
-
checkArgs
public void checkArgs(java.util.ArrayList<java.lang.Integer> argtypes, Token t, java.lang.String templateName) throws ParseException
We do not allow a word token in any other arg position except for the 2nd since we are looking for the pattern #foreach($foo in $bar).- Overrides:
checkArgs
in classDirective
- Parameters:
argtypes
- type, Array of argument types of each argument to the directive for example ParserTreeConstants.JJTWORDt
- token of directivetemplateName
- the name of the template this directive is referenced in.- Throws:
ParseException
-
-