blob: 6c24fb3a71791eb857026ffa698d9d6cac16cdb8 [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>
<!-- Generated by javadoc (1.8.0_281) on Sun Jan 15 15:58:35 CET 2023 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TransformControl (FreeMarker 2.3.32 API)</title>
<meta name="date" content="2023-01-15">
<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="TransformControl (FreeMarker 2.3.32 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":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="class-use/TransformControl.html">Use</a></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="../../freemarker/template/TemplateTransformModel.html" title="interface in freemarker.template"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/template/Version.html" title="class in freemarker.template"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/template/TransformControl.html" target="_top">Frames</a></li>
<li><a href="TransformControl.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">freemarker.template</div>
<h2 title="Interface TransformControl" class="title">Interface TransformControl</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">TransformControl</span></pre>
<div class="block">An interface that can be implemented by writers returned from
<a href="../../freemarker/template/TemplateTransformModel.html#getWriter-java.io.Writer-java.util.Map-"><code>TemplateTransformModel.getWriter(java.io.Writer, java.util.Map)</code></a>. The
methods on this
interfaces are callbacks that will be called by the template engine and that
give the writer a chance to better control the evaluation of the transform
body. The writer can instruct the engine to skip or to repeat body
evaluation, and gets notified about exceptions that are thrown during the
body evaluation.</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="../../freemarker/template/TransformControl.html#END_EVALUATION">END_EVALUATION</a></span></code>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#afterBody--"><code>afterBody()</code></a> that tells the
template engine to end the transform and close the writer.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/TransformControl.html#EVALUATE_BODY">EVALUATE_BODY</a></span></code>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#onStart--"><code>onStart()</code></a> that tells the
template engine to evaluate the body.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/TransformControl.html#REPEAT_EVALUATION">REPEAT_EVALUATION</a></span></code>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#afterBody--"><code>afterBody()</code></a> that tells the
template engine to repeat transform body evaluation and feed
it again to the transform.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/TransformControl.html#SKIP_BODY">SKIP_BODY</a></span></code>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#onStart--"><code>onStart()</code></a> that tells the
template engine to skip evaluation of the body.</div>
</td>
</tr>
</table>
</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="../../freemarker/template/TransformControl.html#afterBody--">afterBody</a></span>()</code>
<div class="block">Called after the body has been evaluated.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/TransformControl.html#onError-java.lang.Throwable-">onError</a></span>(java.lang.Throwable&nbsp;t)</code>
<div class="block">Called if any exception occurs during the transform between the
<a href="../../freemarker/template/TemplateTransformModel.html#getWriter-java.io.Writer-java.util.Map-"><code>TemplateTransformModel.getWriter(java.io.Writer, java.util.Map)</code></a> call
and the <code>Writer.close()</code> call.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/TransformControl.html#onStart--">onStart</a></span>()</code>
<div class="block">Called before the body is evaluated for the first time.</div>
</td>
</tr>
</table>
</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="REPEAT_EVALUATION">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>REPEAT_EVALUATION</h4>
<pre>static final&nbsp;int REPEAT_EVALUATION</pre>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#afterBody--"><code>afterBody()</code></a> that tells the
template engine to repeat transform body evaluation and feed
it again to the transform.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../constant-values.html#freemarker.template.TransformControl.REPEAT_EVALUATION">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="END_EVALUATION">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>END_EVALUATION</h4>
<pre>static final&nbsp;int END_EVALUATION</pre>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#afterBody--"><code>afterBody()</code></a> that tells the
template engine to end the transform and close the writer.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../constant-values.html#freemarker.template.TransformControl.END_EVALUATION">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="SKIP_BODY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SKIP_BODY</h4>
<pre>static final&nbsp;int SKIP_BODY</pre>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#onStart--"><code>onStart()</code></a> that tells the
template engine to skip evaluation of the body.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../constant-values.html#freemarker.template.TransformControl.SKIP_BODY">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="EVALUATE_BODY">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>EVALUATE_BODY</h4>
<pre>static final&nbsp;int EVALUATE_BODY</pre>
<div class="block">Constant returned from <a href="../../freemarker/template/TransformControl.html#onStart--"><code>onStart()</code></a> that tells the
template engine to evaluate the body.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../constant-values.html#freemarker.template.TransformControl.EVALUATE_BODY">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="onStart--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onStart</h4>
<pre>int&nbsp;onStart()
throws <a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a>,
java.io.IOException</pre>
<div class="block">Called before the body is evaluated for the first time.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><ul>
<li><tt>SKIP_BODY</tt> if the transform wants to ignore the body. In this
case, only <code>Writer.close()</code> is called next and processing ends.</li>
<li><tt>EVALUATE_BODY</tt> to normally evaluate the body of the transform
and feed it to the writer</li>
</ul></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a></code></dd>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="afterBody--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>afterBody</h4>
<pre>int&nbsp;afterBody()
throws <a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a>,
java.io.IOException</pre>
<div class="block">Called after the body has been evaluated.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><ul>
<li><tt>END_EVALUATION</tt> if the transformation should be ended.</li>
<li><tt>REPEAT_EVALUATION</tt> to have the engine re-evaluate the
transform body and feed it again to the writer.</li>
</ul></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a></code></dd>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="onError-java.lang.Throwable-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onError</h4>
<pre>void&nbsp;onError(java.lang.Throwable&nbsp;t)
throws java.lang.Throwable</pre>
<div class="block">Called if any exception occurs during the transform between the
<a href="../../freemarker/template/TemplateTransformModel.html#getWriter-java.io.Writer-java.util.Map-"><code>TemplateTransformModel.getWriter(java.io.Writer, java.util.Map)</code></a> call
and the <code>Writer.close()</code> call.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>t</code> - the throwable that represents the exception. It can be any
non-checked throwable, as well as <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template"><code>TemplateException</code></a> and
<code>IOException</code>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Throwable</code> - is recommended that the methods rethrow the received
throwable. If the method wants to throw another throwable, it should
either throw a non-checked throwable, or an instance of
<a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template"><code>TemplateException</code></a> and <code>IOException</code>. Throwing any
other checked exception will cause the engine to rethrow it as
a <code>UndeclaredThrowableException</code>.</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="class-use/TransformControl.html">Use</a></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="../../freemarker/template/TemplateTransformModel.html" title="interface in freemarker.template"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/template/Version.html" title="class in freemarker.template"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/template/TransformControl.html" target="_top">Frames</a></li>
<li><a href="TransformControl.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>