| java.lang.Object javax.servlet.jsp.tagext.TagSupport javax.servlet.jsp.jstl.core.LoopTagSupport
All known Subclasses: org.apache.taglibs.standard.tag.common.core.ForEachSupport, org.apache.taglibs.standard.tag.common.xml.ForEachTag, org.apache.taglibs.standard.tag.common.core.ForTokensSupport,
LoopTagSupport | abstract public class LoopTagSupport extends TagSupport implements LoopTag,IterationTag,TryCatchFinally(Code) | | Base support class to facilitate implementation of iteration tags.
Since most iteration tags will behave identically with respect to
actual iterative behavior, JSTL provides this
base support class to facilitate implementation. Many iteration tags
will extend this and merely implement the hasNext() and
next() methods
to provide contents for the handler to iterate over.
In particular, this base class provides support for:
- Iteration control, based on protected prepare(), next(),
and hasNext() methods
- Subsetting (begin, end, step>functionality,
including validation
of subset parameters for sensibility)
- item retrieval (getCurrent())
- status retrieval (LoopTagStatus)
- exposing attributes (set by var and varStatus attributes)
In providing support for these tasks, LoopTagSupport contains
certain control variables that act to modify the iteration. Accessors
are provided for these control variables when the variables represent
information needed or wanted at translation time (e.g., var,
varStatus). For
other variables, accessors cannot be provided here since subclasses
may differ on their implementations of how those accessors are received.
For instance, one subclass might accept a String and convert it into
an object of a specific type by using an expression evaluator; others
might accept objects directly. Still others might not want to expose
such information to outside control.
author: Shawn Bayern |
Constructor Summary | |
public | LoopTagSupport() Constructs a new LoopTagSupport. |
Method Summary | |
public int | doAfterBody() Continues the iteration when appropriate -- that is, if we (a) have
more items and (b) don't run over our 'end' (given our 'step'). | public void | doCatch(Throwable t) Rethrows the given Throwable. | public void | doFinally() Removes any attributes that this LoopTagSupport set. | public int | doStartTag() Begins iterating by processing the first item. | public Object | getCurrent() | protected String | getDelims() | public LoopTagStatus | getLoopStatus() | abstract protected boolean | hasNext() Returns information concerning the availability of more items
over which to iterate. | abstract protected Object | next() Returns the next object over which the tag should iterate. | abstract protected void | prepare() Prepares for a single tag invocation. | public void | release() Releases any resources this LoopTagSupport may have (or inherit). | public void | setVar(String id) Sets the 'var' attribute. | public void | setVarStatus(String statusId) Sets the 'varStatus' attribute. | protected void | validateBegin() | protected void | validateEnd() | protected void | validateStep() |
begin | protected int begin(Code) | | Starting index ('begin' attribute)
|
beginSpecified | protected boolean beginSpecified(Code) | | Boolean flag indicating whether 'begin' was specified.
|
deferredExpression | protected ValueExpression deferredExpression(Code) | | The deferred expression if any
|
end | protected int end(Code) | | Ending index of the iteration ('end' attribute).
A value of -1 internally indicates 'no end
specified', although accessors for the core JSTL tags do not
allow this value to be supplied directly by the user.
|
endSpecified | protected boolean endSpecified(Code) | | Boolean flag indicating whether 'end' was specified.
|
itemIdstatusId | protected String itemIdstatusId(Code) | | Attribute-exposing control
|
step | protected int step(Code) | | Iteration step ('step' attribute)
|
stepSpecified | protected boolean stepSpecified(Code) | | Boolean flag indicating whether 'step' was specified.
|
LoopTagSupport | public LoopTagSupport()(Code) | | Constructs a new LoopTagSupport. As with TagSupport, subclasses
should not implement constructors with arguments, and no-arguments
constructors implemented by subclasses must call the superclass
constructor.
|
doAfterBody | public int doAfterBody() throws JspException(Code) | | Continues the iteration when appropriate -- that is, if we (a) have
more items and (b) don't run over our 'end' (given our 'step').
|
doFinally | public void doFinally()(Code) | | Removes any attributes that this LoopTagSupport set.
These attributes are intended to support scripting variables with
NESTED scope, so we don't want to pollute attribute space by leaving
them lying around.
|
doStartTag | public int doStartTag() throws JspException(Code) | | Begins iterating by processing the first item.
|
hasNext | abstract protected boolean hasNext() throws JspTagException(Code) | | Returns information concerning the availability of more items
over which to iterate. This method must be provided by concrete
subclasses of LoopTagSupport to assist the iterative logic
provided by the supporting base class.
See next for more information about the
purpose and expectations behind this tag.
true if there is at least one more item to iterateover, false otherwise exception: javax.servlet.jsp.JspTagException - See Also: LoopTagSupport.next |
next | abstract protected Object next() throws JspTagException(Code) | | Returns the next object over which the tag should iterate. This
method must be provided by concrete subclasses of LoopTagSupport
to inform the base logic about what objects it should iterate over.
It is expected that this method will generally be backed by an
Iterator, but this will not always be the case. In particular, if
retrieving the next object raises the possibility of an exception
being thrown, this method allows that exception to propagate back
to the JSP container as a JspTagException; a standalone Iterator
would not be able to do this. (This explains why LoopTagSupport
does not simply call for an Iterator from its subtags.)
the java.lang.Object to use in the next round of iteration exception: java.util.NoSuchElementException - if next() is called but no new elements are available exception: javax.servlet.jsp.JspTagException - for other, unexpected exceptions |
prepare | abstract protected void prepare() throws JspTagException(Code) | | Prepares for a single tag invocation. Specifically, allows
subclasses to prepare for calls to hasNext() and next().
Subclasses can assume that prepare() will be called once for
each invocation of doStartTag() in the superclass.
exception: javax.servlet.jsp.JspTagException - |
release | public void release()(Code) | | Releases any resources this LoopTagSupport may have (or inherit).
|
setVar | public void setVar(String id)(Code) | | Sets the 'var' attribute.
Parameters: id - Name of the exported scoped variable storing the current itemof the iteration. |
setVarStatus | public void setVarStatus(String statusId)(Code) | | Sets the 'varStatus' attribute.
Parameters: statusId - Name of the exported scoped variable storing the statusof the iteration. |
validateBegin | protected void validateBegin() throws JspTagException(Code) | | Ensures the "begin" property is sensible, throwing an exception
expected to propagate up if it isn't
|
validateEnd | protected void validateEnd() throws JspTagException(Code) | | Ensures the "end" property is sensible, throwing an exception
expected to propagate up if it isn't
|
validateStep | protected void validateStep() throws JspTagException(Code) | | Ensures the "step" property is sensible, throwing an exception
expected to propagate up if it isn't
|
|
|