blob: 2cae57450e4f846d8c9c4d07f461c7c246d339c7 [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>FlowHandler</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
<link rel="shortcut icon" href="/img/jakarta-favicon.ico">
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="FlowHandler";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":10,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete 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="../../../jakarta/faces/flow/FlowCallNode.html" title="class in jakarta.faces.flow"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../jakarta/faces/flow/FlowHandlerFactory.html" title="class in jakarta.faces.flow"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/faces/flow/FlowHandler.html" target="_top">Frames</a></li>
<li><a href="FlowHandler.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><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&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">jakarta.faces.flow</div>
<h2 title="Class FlowHandler" class="title">Class FlowHandler</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>jakarta.faces.flow.FlowHandler</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">FlowHandler</span>
extends java.lang.Object</pre>
<div class="block"><p class="changed_added_2_2">
<strong class="changed_modified_2_3">FlowHandler</strong> is the main entry point that enables the runtime to
interact with the faces flows feature. <a href="../../../jakarta/faces/application/NavigationHandler.html" title="class in jakarta.faces.application"><code>NavigationHandler</code></a> uses this class when it
needs to make navigational decisions related to flows. The faces flow feature entirely depends on the
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a> feature and also on CDI.
</p>
<div class="changed_added_2_2">
<p>
<strong>Defining Flows</strong>
</p>
<p>
The implementation must support defining faces flows using the <code>&lt;flow-definition&gt;</code> element as
specified in the Application Configuration Resources XML Schema Definition, or by using the
<a href="../../../jakarta/faces/flow/builder/FlowBuilder.html" title="class in jakarta.faces.flow.builder"><code>FlowBuilder</code></a> API. Additional means of defining flows may be provided by decorating
the <a href="../../../jakarta/faces/flow/FlowHandlerFactory.html" title="class in jakarta.faces.flow"><code>FlowHandlerFactory</code></a>.
</p>
<p>
<strong>Managing Flows</strong>
</p>
<blockquote>
<p>
The singleton instance of this class must be thread safe, and therefore must not store any per-user state. Flows are,
however, traversed in a per-user manner, and must be associated with the current
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a>. Furthermore, Flows may be nested. These requirements strongly suggest
managing the flows with a stack-like runtime data structure, stored in a per-user fashion and associated with the
<code>ClientWindow</code>. <span class="changed_added_2_3">Because Flow instances are immutable, yet the flow stack is
per-user, implementations must make allowance for flow scoped data (managed beans declared to be <a href="../../../jakarta/faces/flow/FlowScoped.html" title="annotation in jakarta.faces.flow"><code>FlowScoped</code></a>
and data stored in the <code>Map</code> returned by <a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlowScope--"><code>getCurrentFlowScope()</code></a>) to be fully re-entrant. For
example, consider an application with two flows, A and B, each with a single <code>FlowScoped</code> bean
<code>MyBeanA</code> and <code>MyBeanB</code>, respectively. Entry into flow A causes <code>MyBeanA</code> to become
active. Calling from A into B causes <code>MyBeanB</code> to become active. Calling back into A causes a new instance
of <code>MyBeanA</code> to become active, rather than reactivating the earlier instance of <code>MyBeanA</code>.
</span>
</p>
<p>
<strong>The Flow Graph</strong>
</p>
<p>
Prior versions of the specification defined a flow graph but the only kind of node in the graph was a VDL view. The
Faces Flow feature currently defines the following node types.
</p>
<ul>
<li>
<p>
View
</p>
<p>
This is the regular Jakarta Server Faces VDL View that has been in the specification since the beginning.
</p>
</li>
<li>
<p>
Switch
</p>
<p>
This is a list of Jakarta Expression Language expressions. When control is passed to a switch node, each expression
in the list is evaluated and the first one that returns <code>true</code> is used to define the id of the next node to
which control must be passed. If none of the expressions evaluates to <code>true</code>, control passes to the specified
default id.
</p>
</li>
<li>
<p>
Return
</p>
<p>
This node type specifies an outcome that is returned to the calling flow.
</p>
</li>
<li>
<p>
Method Call
</p>
<p>
This node type allows invocation of arbitrary application logic at any point in the executiong of the flow. An
outcome can be specified that will cause a navigation case to be navigated to after the method has been invoked.
</p>
</li>
<li>
<p>
Faces Flow Call
</p>
<p>
This node type allows one flow to call another flow. The calling flow remains active and is not exited until control
returns from the called flow.
</p>
</li>
</ul>
<p>
Edges in the graph are defined by the existing Jakarta Server Faces navigation rule system.
</p>
<p>
<strong>Flows and Model Objects</strong>
</p>
<blockquote>
<p>
Managed beans annotated with the CDI annotation <a href="../../../jakarta/faces/flow/FlowScoped.html" title="annotation in jakarta.faces.flow"><code>FlowScoped</code></a> <span class="changed_added_2_3">are created
lazily, when referenced, after</span> a user agent's entry into the named scope, and must be made available for
garbage collection when the user agent leaves the flow.
</p>
<p>
The <code>flowScope</code> Jakarta Expression Language implicit object is also available to store values in the
"current" slope. Values stored in this scope must be made available for garbage collection when the user agent leaves
the flow.
</p>
</blockquote>
</blockquote>
</div></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</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 java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#FLOW_ID_REQUEST_PARAM_NAME">FLOW_ID_REQUEST_PARAM_NAME</a></span></code>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the parameter name for a parameter representing the flow id of the flow that this component
will cause to be entered.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#NULL_FLOW">NULL_FLOW</a></span></code>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the value of the parameter named by <a href="../../../jakarta/faces/flow/FlowHandler.html#TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME"><code>TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</code></a> when
returning from a flow (without entering another flow) using such a component.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME">TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</a></span></code>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the parameter name for a parameter representing the defining document id of the flow that
this component will cause to be entered.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#FlowHandler--">FlowHandler</a></span>()</code>&nbsp;</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><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete 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>abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#addFlow-jakarta.faces.context.FacesContext-jakarta.faces.flow.Flow-">addFlow</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;toAdd)</code>
<div class="block"><p class="changed_added_2_2">
Add the argument <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> to the collection of <code>Flow</code>s known to the current application.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#clientWindowTransition-jakarta.faces.context.FacesContext-">clientWindowTransition</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block"><p class="changed_added_2_2">
Allow for flow transitions in the case of components rendered by the renderers from component-family
<code>jakarta.faces.OutcomeTarget</code>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow--">getCurrentFlow</a></span>()</code>
<div class="block"><p class="changed_added_2_2">
Convenience overload that calls <a href="../../../jakarta/faces/context/FacesContext.html#getCurrentInstance--"><code>FacesContext.getCurrentInstance()</code></a> and then calls through to
<a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-"><code>getCurrentFlow(jakarta.faces.context.FacesContext)</code></a>.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-">getCurrentFlow</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block"><p class="changed_added_2_2">
Return the currently active <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> for the argument <code>FacesContext</code>, or <code>null</code> if no flow is active.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>abstract java.util.Map&lt;java.lang.Object,java.lang.Object&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlowScope--">getCurrentFlowScope</a></span>()</code>
<div class="block"><p class="changed_added_2_2">
Return the <code>Map</code> that backs the <code>#{flowScope}</code> Jakarta Expression Language implicit object or
<code>null</code> if no flow is currently active.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#getFlow-jakarta.faces.context.FacesContext-java.lang.String-java.lang.String-">getFlow</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;definingDocumentId,
java.lang.String&nbsp;id)</code>
<div class="block"><p class="changed_added_2_2">
Return the <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> whose <code>id</code> is equivalent to the argument <code>id</code>, within the scope of the argument <code>definingDocument</code>.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>abstract java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#getLastDisplayedViewId-jakarta.faces.context.FacesContext-">getLastDisplayedViewId</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block"><p class="changed_added_2_2">
Return the last displayed viewId for the current flow, as returned by
<a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-"><code>getCurrentFlow(jakarta.faces.context.FacesContext)</code></a>, or <code>null</code> if there is no current flow.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>abstract boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#isActive-jakarta.faces.context.FacesContext-java.lang.String-java.lang.String-">isActive</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;definingDocument,
java.lang.String&nbsp;id)</code>
<div class="block"><p class="changed_added_2_2">
Return <code>true</code> if and only if the flow referenced by the argument <code>definingDocument</code> and <code>id</code> is
currently active.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#popReturnMode-jakarta.faces.context.FacesContext-">popReturnMode</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block"><p class="changed_added_2_2">
Enable the correct handling of navigation when processing a return node.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#pushReturnMode-jakarta.faces.context.FacesContext-">pushReturnMode</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block"><p class="changed_added_2_2">
Enable the correct handling of navigation when processing a return node.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/flow/FlowHandler.html#transition-jakarta.faces.context.FacesContext-jakarta.faces.flow.Flow-jakarta.faces.flow.Flow-jakarta.faces.flow.FlowCallNode-java.lang.String-">transition</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;sourceFlow,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;targetFlow,
<a href="../../../jakarta/faces/flow/FlowCallNode.html" title="class in jakarta.faces.flow">FlowCallNode</a>&nbsp;outboundCallNode,
java.lang.String&nbsp;toViewId)</code>
<div class="block"><p class="changed_added_2_2">
Perform a transition in the flow graph for the current user's <a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</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="FLOW_ID_REQUEST_PARAM_NAME">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>FLOW_ID_REQUEST_PARAM_NAME</h4>
<pre>public static final&nbsp;java.lang.String FLOW_ID_REQUEST_PARAM_NAME</pre>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the parameter name for a parameter representing the flow id of the flow that this component
will cause to be entered.
</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#jakarta.faces.flow.FlowHandler.FLOW_ID_REQUEST_PARAM_NAME">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</h4>
<pre>public static final&nbsp;java.lang.String TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</pre>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the parameter name for a parameter representing the defining document id of the flow that
this component will cause to be entered.
</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#jakarta.faces.flow.FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="NULL_FLOW">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>NULL_FLOW</h4>
<pre>public static final&nbsp;java.lang.String NULL_FLOW</pre>
<div class="block"><p class="changed_added_2_2">
Components that are rendered by <code>Renderers</code> of component-family <code>jakarta.faces.OutcomeTarget</code>
must use this constant as the value of the parameter named by <a href="../../../jakarta/faces/flow/FlowHandler.html#TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME"><code>TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</code></a> when
returning from a flow (without entering another flow) using such a component.
</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#jakarta.faces.flow.FlowHandler.NULL_FLOW">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="FlowHandler--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>FlowHandler</h4>
<pre>public&nbsp;FlowHandler()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getCurrentFlowScope--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentFlowScope</h4>
<pre>public abstract&nbsp;java.util.Map&lt;java.lang.Object,java.lang.Object&gt;&nbsp;getCurrentFlowScope()</pre>
<div class="block"><p class="changed_added_2_2">
Return the <code>Map</code> that backs the <code>#{flowScope}</code> Jakarta Expression Language implicit object or
<code>null</code> if no flow is currently active.
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <code>Map</code> for this flow scope.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="getFlow-jakarta.faces.context.FacesContext-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFlow</h4>
<pre>public abstract&nbsp;<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;getFlow(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;definingDocumentId,
java.lang.String&nbsp;id)</pre>
<div class="block"><p class="changed_added_2_2">
Return the <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> whose <code>id</code> is equivalent to the argument <code>id</code>, within the scope of the argument <code>definingDocument</code>.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dd><code>definingDocumentId</code> - An application unique identifier for the document in which the returned flow is defined.</dd>
<dd><code>id</code> - the id of a <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a>, unique within the scope of the <code>definingDocument</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <code>Flow</code> for the argument identifiers.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if any of the parameters are <code>null</code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="addFlow-jakarta.faces.context.FacesContext-jakarta.faces.flow.Flow-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addFlow</h4>
<pre>public abstract&nbsp;void&nbsp;addFlow(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;toAdd)</pre>
<div class="block"><p class="changed_added_2_2">
Add the argument <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> to the collection of <code>Flow</code>s known to the current application. The implementation
must be thread safe.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dd><code>toAdd</code> - the <code>Flow</code> to add.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if any of the parameters are <code>null</code></dd>
<dd><code>java.lang.IllegalStateException</code> - if there is already a flow with the same <code>id</code> as the argument <code>Flow</code> within
the scope of the <code>definingDocument</code>.</dd>
<dd><code>java.lang.IllegalArgumentException</code> - if the <code>id</code> of the flow to add is <code>null</code> or the empty string.</dd>
<dd><code>java.lang.IllegalArgumentException</code> - if the <code>definingDocumentId</code> of the <code>toAdd</code> is <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="getCurrentFlow-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentFlow</h4>
<pre>public abstract&nbsp;<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;getCurrentFlow(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p class="changed_added_2_2">
Return the currently active <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a> for the argument <code>FacesContext</code>, or <code>null</code> if no flow is active.
A <code>Flow</code> must always be associated with exactly one <a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a>, but a
<code>ClientWindow</code> may have multiple <code>Flow</code>s.
</p>
<div class="changed_added_2_2">
<p>
If <a href="../../../jakarta/faces/flow/FlowHandler.html#pushReturnMode-jakarta.faces.context.FacesContext-"><code>pushReturnMode(jakarta.faces.context.FacesContext)</code></a> had been called with <code>true</code> as the argument before invoking this method, return the
preceding flow on the stack instead of the actual current flow, or <code>null</code> if there is no preceding flow.
Otherwise, return the current flow.
</p>
</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current <code>Flow</code> or <code>null</code> if no flow is active</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if any of the parameters are <code>null</code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="getCurrentFlow--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentFlow</h4>
<pre>public&nbsp;<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;getCurrentFlow()</pre>
<div class="block"><p class="changed_added_2_2">
Convenience overload that calls <a href="../../../jakarta/faces/context/FacesContext.html#getCurrentInstance--"><code>FacesContext.getCurrentInstance()</code></a> and then calls through to
<a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-"><code>getCurrentFlow(jakarta.faces.context.FacesContext)</code></a>.
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current <code>Flow</code> or <code>null</code> if no flow is active</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="getLastDisplayedViewId-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLastDisplayedViewId</h4>
<pre>public abstract&nbsp;java.lang.String&nbsp;getLastDisplayedViewId(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p class="changed_added_2_2">
Return the last displayed viewId for the current flow, as returned by
<a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-"><code>getCurrentFlow(jakarta.faces.context.FacesContext)</code></a>, or <code>null</code> if there is no current flow.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the last displayed viewId.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if <code>context</code> is <code>null</code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="pushReturnMode-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>pushReturnMode</h4>
<pre>public abstract&nbsp;void&nbsp;pushReturnMode(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p class="changed_added_2_2">
Enable the correct handling of navigation when processing a return node. The default
<a href="../../../jakarta/faces/application/NavigationHandler.html" title="class in jakarta.faces.application"><code>NavigationHandler</code></a> specification requires calling this method before processing the
navigation rules for the flow return, and calling <a href="../../../jakarta/faces/flow/FlowHandler.html#popReturnMode-jakarta.faces.context.FacesContext-"><code>popReturnMode(jakarta.faces.context.FacesContext)</code></a>, from a <code>finally</code> block, immediately
afterward.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if <code>context</code> is <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="popReturnMode-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>popReturnMode</h4>
<pre>public abstract&nbsp;void&nbsp;popReturnMode(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p class="changed_added_2_2">
Enable the correct handling of navigation when processing a return node. The default
<a href="../../../jakarta/faces/application/NavigationHandler.html" title="class in jakarta.faces.application"><code>NavigationHandler</code></a> specification requires calling this method from a <code>finally</code>
block, immediately attempting to process the navigation rules in the context of a flow return.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if <code>context</code> is <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="transition-jakarta.faces.context.FacesContext-jakarta.faces.flow.Flow-jakarta.faces.flow.Flow-jakarta.faces.flow.FlowCallNode-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>transition</h4>
<pre>public abstract&nbsp;void&nbsp;transition(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;sourceFlow,
<a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow">Flow</a>&nbsp;targetFlow,
<a href="../../../jakarta/faces/flow/FlowCallNode.html" title="class in jakarta.faces.flow">FlowCallNode</a>&nbsp;outboundCallNode,
java.lang.String&nbsp;toViewId)</pre>
<div class="block"><p class="changed_added_2_2">
Perform a transition in the flow graph for the current user's <a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a>. Obtain
references to the <code>Flow</code> instances corresponding to the <code>origin</code> and <code>destination</code> arguments. If
the <code>origin Flow</code> is equal to the <code>destination Flow</code>, take no action and return <code>null</code>. Otherwise,
if the <code>outboundCallNode</code> argument is non-<code>null</code> save aside the outbound parameters. For discussion
<strong>evaluatedParams</strong> is a data structure that stores the evaluated values of any outbound parameters. It
is necessary to evaluate these values before popping any flow scopes because the values may refer to scoped instances
that need to be passed to the target flow, but will not be available once the new scope is activated. Save aside the
outbound parameters using the following algorithm.
</p>
<div class="changed_added_2_2">
<blockquote>
<p>
If the <code>outboundParameters</code> property of <code>outboundCallNode</code> is non-<code>null</code> and not empty, and the <code>inboundParameters</code> property of the target flow is
non-<code>null</code> and not empty, for each entry in the outbound parameters whose name matches an entry in the inbound
parameters, evaluate the value of the parameter, and put the evaluated value into <strong>evaluatedParams</strong>
under the corresponding name. Otherwise, consider <strong>evaluatedParams</strong> to be empty.
</p>
</blockquote>
<p>
If the <code>destination Flow</code> is a sub-flow of the <code>origin Flow</code> push the <code>destination Flow</code> onto the flow data structure and return <code>the destination Flow</code>.
Otherwise, pop the current <code>Flow</code> from the flow data structure. If the <code>destination Flow</code> is
non-<code>null</code>, make the <code>destination Flow</code> the current flow, pushing it onto the data structure. If <strong>evaluatedParams</strong> is not
empty, for each entry, find the corresponding parameter in the target flow's inbound parameters and call its
<code>setValue</code> method, passing the value from <strong>evaluatedParams</strong>.
</p>
</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dd><code>sourceFlow</code> - the current <code>Flow</code>, or <code>null</code> if there is no source flow.</dd>
<dd><code>targetFlow</code> - the destination <code>Flow</code>, or <code>null</code> if there is no destination flow.</dd>
<dd><code>outboundCallNode</code> - the flow call node causing this transition, or <code>null</code> if this transition is not caused
by a flow call.</dd>
<dd><code>toViewId</code> - the viewId of the view being displayed as a result of this transition. This parameter makes it
possible to implement <a href="../../../jakarta/faces/flow/FlowHandler.html#getLastDisplayedViewId-jakarta.faces.context.FacesContext-"><code>getLastDisplayedViewId(jakarta.faces.context.FacesContext)</code></a>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if <code>context</code> or <code>toViewId</code> is <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="clientWindowTransition-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clientWindowTransition</h4>
<pre>public abstract&nbsp;void&nbsp;clientWindowTransition(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p class="changed_added_2_2">
Allow for flow transitions in the case of components rendered by the renderers from component-family
<code>jakarta.faces.OutcomeTarget</code>. These transitions must happen at the front of the request processing
lifecycle due to the HTTP GET based nature of such components. Therefore, this method is called from the restore view
phase of the lifecycle.
</p>
<div class="changed_added_2_2">
<p>
Let <em>flowId</em> be the value in the request parameter map for the parameter whose name is given by the value of
<a href="../../../jakarta/faces/flow/FlowHandler.html#FLOW_ID_REQUEST_PARAM_NAME"><code>FLOW_ID_REQUEST_PARAM_NAME</code></a>. Let <em>toFlowDocumentId</em> be the value in the request parameter map for the
paramater whose name is given by the value of <a href="../../../jakarta/faces/flow/FlowHandler.html#TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME"><code>TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME</code></a>. If
<em>toFlowDocumentId</em> is <code>null</code>, take no action and return. Otherwise, let <em>sourceFlow</em> be the
return from <a href="../../../jakarta/faces/flow/FlowHandler.html#getCurrentFlow-jakarta.faces.context.FacesContext-"><code>getCurrentFlow(jakarta.faces.context.FacesContext)</code></a>. A <code>null</code> value indicates there is
no current flow, which will be the case if this navigation is trying to enter a flow. If <em>flowId</em> is not
<code>null</code> and <em>toFlowDocumentId</em> is <strong>not</strong> equal to the value of <a href="../../../jakarta/faces/flow/FlowHandler.html#NULL_FLOW"><code>NULL_FLOW</code></a>, let
<em>targetFlow</em> be the result of calling
<a href="../../../jakarta/faces/flow/FlowHandler.html#getFlow-jakarta.faces.context.FacesContext-java.lang.String-java.lang.String-"><code>getFlow(jakarta.faces.context.FacesContext, java.lang.String, java.lang.String)</code></a>, passing
<em>toFlowDocumentId</em> and <em>flowId</em> as the last two arguments, respectively. If the result is
non-<code>null</code>, let <em>flowCallNode</em> be the return from calling <a href="../../../jakarta/faces/flow/Flow.html#getFlowCall-jakarta.faces.flow.Flow-"><code>Flow.getFlowCall(jakarta.faces.flow.Flow)</code></a> on the
<em>sourceFlow</em>, passing <em>targetFlow</em> as the argument. Otherwise, <em>targetFlow</em> and
<em>flowCallNode</em> must remain <code>null</code>, indicating that this is a flow return. Call
<a href="../../../jakarta/faces/context/FacesContext.html#getViewRoot--"><code>FacesContext.getViewRoot()</code></a> and let <em>toViewId</em> be the the return from calling
<a href="../../../jakarta/faces/component/UIViewRoot.html#getViewId--"><code>UIViewRoot.getViewId()</code></a> on it.
</p>
<p>
Call, <a href="../../../jakarta/faces/flow/FlowHandler.html#transition-jakarta.faces.context.FacesContext-jakarta.faces.flow.Flow-jakarta.faces.flow.Flow-jakarta.faces.flow.FlowCallNode-java.lang.String-"><code>transition(jakarta.faces.context.FacesContext, jakarta.faces.flow.Flow, jakarta.faces.flow.Flow, jakarta.faces.flow.FlowCallNode, java.lang.String)</code></a>, passing the arguments gathered in the preceding algorithm.
</p>
</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if <code>context</code> is <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="isActive-jakarta.faces.context.FacesContext-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>isActive</h4>
<pre>public abstract&nbsp;boolean&nbsp;isActive(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;definingDocument,
java.lang.String&nbsp;id)</pre>
<div class="block"><p class="changed_added_2_2">
Return <code>true</code> if and only if the flow referenced by the argument <code>definingDocument</code> and <code>id</code> is
currently active.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <code>FacesContext</code> for the current request.</dd>
<dd><code>definingDocument</code> - An application unique identifier for the document in which the returned flow is defined.</dd>
<dd><code>id</code> - the id of a <a href="../../../jakarta/faces/flow/Flow.html" title="class in jakarta.faces.flow"><code>Flow</code></a>, unique within the scope of the <code>definingDocument</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if and only if the referenced flow is active</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if any of the parameters are <code>null</code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</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="../../../jakarta/faces/flow/FlowCallNode.html" title="class in jakarta.faces.flow"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../jakarta/faces/flow/FlowHandlerFactory.html" title="class in jakarta.faces.flow"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/faces/flow/FlowHandler.html" target="_top">Frames</a></li>
<li><a href="FlowHandler.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><a href="#constructor.summary">Constr</a>&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><a href="#constructor.detail">Constr</a>&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>