blob: e3941399b9437338d608b0421ceebf8d3a595631 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>IterationTag</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="IterationTag";
}
}
catch(err) {
}
//-->
var methods = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../javax/servlet/jsp/tagext/FunctionInfo.html" title="class in javax.servlet.jsp.tagext"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../javax/servlet/jsp/tagext/JspFragment.html" title="class in javax.servlet.jsp.tagext"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?javax/servlet/jsp/tagext/IterationTag.html" target="_top">Frames</a></li>
<li><a href="IterationTag.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">javax.servlet.jsp.tagext</div>
<h2 title="Interface IterationTag" class="title">Interface IterationTag</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../javax/servlet/jsp/tagext/JspTag.html" title="interface in javax.servlet.jsp.tagext">JspTag</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html" title="interface in javax.servlet.jsp.tagext">Tag</a></dd>
</dl>
<dl>
<dt>All Known Subinterfaces:</dt>
<dd><a href="../../../../javax/servlet/jsp/tagext/BodyTag.html" title="interface in javax.servlet.jsp.tagext">BodyTag</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../javax/servlet/jsp/tagext/BodyTagSupport.html" title="class in javax.servlet.jsp.tagext">BodyTagSupport</a>, <a href="../../../../javax/servlet/jsp/jstl/core/ConditionalTagSupport.html" title="class in javax.servlet.jsp.jstl.core">ConditionalTagSupport</a>, <a href="../../../../javax/servlet/jsp/jstl/core/LoopTagSupport.html" title="class in javax.servlet.jsp.jstl.core">LoopTagSupport</a>, <a href="../../../../javax/servlet/jsp/tagext/TagSupport.html" title="class in javax.servlet.jsp.tagext">TagSupport</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">IterationTag</span>
extends <a href="../../../../javax/servlet/jsp/tagext/Tag.html" title="interface in javax.servlet.jsp.tagext">Tag</a></pre>
<div class="block">The IterationTag interface extends Tag by defining one additional method that controls the reevaluation of its body.
<p>
A tag handler that implements IterationTag is treated as one that implements Tag regarding the doStartTag() and
doEndTag() methods. IterationTag provides a new method: <code>doAfterBody()</code>.
<p>
The doAfterBody() method is invoked after every body evaluation to control whether the body will be reevaluated or
not. If doAfterBody() returns IterationTag.EVAL_BODY_AGAIN, then the body will be reevaluated. If doAfterBody()
returns Tag.SKIP_BODY, then the body will be skipped and doEndTag() will be evaluated instead.
<p>
<B>Properties</B> There are no new properties in addition to those in Tag.
<p>
<B>Methods</B> There is one new methods: doAfterBody().
<p>
<B>Lifecycle</B>
<p>
Lifecycle details are described by the transition diagram below. Exceptions that are thrown during the computation of
doStartTag(), BODY and doAfterBody() interrupt the execution sequence and are propagated up the stack, unless the tag
handler implements the TryCatchFinally interface; see that interface for details.
<p>
<IMG src="doc-files/IterationTagProtocol.gif" alt="Lifecycle Details Transition Diagram for IterationTag">
<p>
<B>Empty and Non-Empty Action</B>
<p>
If the TagLibraryDescriptor file indicates that the action must always have an empty element body, by a
&lt;body-content&gt; entry of "empty", then the doStartTag() method must return SKIP_BODY.
<p>
Note that which methods are invoked after the doStartTag() depends on both the return value and on if the custom
action element is empty or not in the JSP page, not on how it's declared in the TLD.
<p>
If SKIP_BODY is returned the body is not evaluated, and then doEndTag() is invoked.
<p>
If EVAL_BODY_INCLUDE is returned, and the custom action element is not empty, the body is evaluated and "passed
through" to the current out, then doAfterBody() is invoked and, after zero or more iterations, doEndTag() is invoked.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../javax/servlet/jsp/tagext/IterationTag.html#EVAL_BODY_AGAIN">EVAL_BODY_AGAIN</a></span></code>
<div class="block">Request the reevaluation of some body.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.javax.servlet.jsp.tagext.Tag">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;javax.servlet.jsp.tagext.<a href="../../../../javax/servlet/jsp/tagext/Tag.html" title="interface in javax.servlet.jsp.tagext">Tag</a></h3>
<code><a href="../../../../javax/servlet/jsp/tagext/Tag.html#EVAL_BODY_INCLUDE">EVAL_BODY_INCLUDE</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#EVAL_PAGE">EVAL_PAGE</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#SKIP_BODY">SKIP_BODY</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#SKIP_PAGE">SKIP_PAGE</a></code></li>
</ul>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../javax/servlet/jsp/tagext/IterationTag.html#doAfterBody--">doAfterBody</a></span>()</code>
<div class="block">Process body (re)evaluation.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.javax.servlet.jsp.tagext.Tag">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;javax.servlet.jsp.tagext.<a href="../../../../javax/servlet/jsp/tagext/Tag.html" title="interface in javax.servlet.jsp.tagext">Tag</a></h3>
<code><a href="../../../../javax/servlet/jsp/tagext/Tag.html#doEndTag--">doEndTag</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#doStartTag--">doStartTag</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#getParent--">getParent</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#release--">release</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#setPageContext-javax.servlet.jsp.PageContext-">setPageContext</a>, <a href="../../../../javax/servlet/jsp/tagext/Tag.html#setParent-javax.servlet.jsp.tagext.Tag-">setParent</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="EVAL_BODY_AGAIN">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>EVAL_BODY_AGAIN</h4>
<pre>static final&nbsp;int EVAL_BODY_AGAIN</pre>
<div class="block">Request the reevaluation of some body. Returned from doAfterBody.
For compatibility with JSP 1.1, the value is carefully selected to be the same as the, now deprecated,
BodyTag.EVAL_BODY_TAG,</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#javax.servlet.jsp.tagext.IterationTag.EVAL_BODY_AGAIN">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="doAfterBody--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>doAfterBody</h4>
<pre>int&nbsp;doAfterBody()
throws <a href="../../../../javax/servlet/jsp/JspException.html" title="class in javax.servlet.jsp">JspException</a></pre>
<div class="block">Process body (re)evaluation. This method is invoked by the JSP Page implementation object after every evaluation
of the body into the BodyEvaluation object. The method is not invoked if there is no body evaluation.
<p>
If doAfterBody returns EVAL_BODY_AGAIN, a new evaluation of the body will happen (followed by another invocation
of doAfterBody). If doAfterBody returns SKIP_BODY, no more body evaluations will occur, and the doEndTag method
will be invoked.
<p>
If this tag handler implements BodyTag and doAfterBody returns SKIP_BODY, the value of out will be restored using
the popBody method in pageContext prior to invoking doEndTag.
<p>
The method re-invocations may be lead to different actions because there might have been some changes to shared
state, or because of external computation.
<p>
The JSP container will resynchronize the values of any AT_BEGIN and NESTED variables (defined by the associated
TagExtraInfo or TLD) after the invocation of doAfterBody().</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether additional evaluations of the body are desired</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../javax/servlet/jsp/JspException.html" title="class in javax.servlet.jsp">JspException</a></code> - if an error occurred while processing this tag</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../javax/servlet/jsp/tagext/FunctionInfo.html" title="class in javax.servlet.jsp.tagext"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../javax/servlet/jsp/tagext/JspFragment.html" title="class in javax.servlet.jsp.tagext"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?javax/servlet/jsp/tagext/IterationTag.html" target="_top">Frames</a></li>
<li><a href="IterationTag.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>