blob: a522de515bac8efa906ed6a4e0ffaeb28c26a83a [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>ResponseStateManager</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="ResponseStateManager";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance 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/render/RenderKitWrapper.html" title="class in jakarta.faces.render"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/faces/render/ResponseStateManager.html" target="_top">Frames</a></li>
<li><a href="ResponseStateManager.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.render</div>
<h2 title="Class ResponseStateManager" class="title">Class ResponseStateManager</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>jakarta.faces.render.ResponseStateManager</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">ResponseStateManager</span>
extends java.lang.Object</pre>
<div class="block"><p>
<strong class="changed_modified_2_0 changed_modified_2_2"> ResponseStateManager</strong> is the helper class to
<a href="../../../jakarta/faces/application/StateManager.html" title="class in jakarta.faces.application"><code>StateManager</code></a> that knows the specific rendering technology being used to generate
the response. It is a singleton abstract class, vended by the <a href="../../../jakarta/faces/render/RenderKit.html" title="class in jakarta.faces.render"><code>RenderKit</code></a>. This class knows the mechanics of
saving state, whether it be in hidden fields, session, or some combination of the two.
</p></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 java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#CLIENT_WINDOW_PARAM">CLIENT_WINDOW_PARAM</a></span></code>
<div class="block"><p class="changed_added_2_2">
The name of the hidden field that refers to the encoded ClientWindow.</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/render/ResponseStateManager.html#CLIENT_WINDOW_URL_PARAM">CLIENT_WINDOW_URL_PARAM</a></span></code>
<div class="block"><p class="changed_added_2_2">
The name of the URL query parameter for transmitting the client window id.</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/render/ResponseStateManager.html#NON_POSTBACK_VIEW_TOKEN_PARAM">NON_POSTBACK_VIEW_TOKEN_PARAM</a></span></code>
<div class="block"><p class="changed_added_2_2">
The value of this constant is taken to be the name of a request parameter whose value is inspected to verify the
safety of an incoming non-postback request with respect to the currently configured <code>Set</code> of protected
views for this application.</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/render/ResponseStateManager.html#RENDER_KIT_ID_PARAM">RENDER_KIT_ID_PARAM</a></span></code>
<div class="block">
The name of the request parameter used by the default implementation of
<a href="../../../jakarta/faces/application/ViewHandler.html#calculateRenderKitId-jakarta.faces.context.FacesContext-"><code>ViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext)</code></a> to derive a RenderKit ID.</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/render/ResponseStateManager.html#VIEW_STATE_PARAM">VIEW_STATE_PARAM</a></span></code>
<div class="block">
<span class="changed_modified_2_0 changed_modified_2_2">Implementations</span> must use this constant field value as
the name of the client parameter in which to save the state between requests.</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/render/ResponseStateManager.html#ResponseStateManager--">ResponseStateManager</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="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>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#getCryptographicallyStrongTokenFromSession-jakarta.faces.context.FacesContext-">getCryptographicallyStrongTokenFromSession</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">
Compliant implementations must return a cryptographically strong token for use to protect views in this application.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#getState-jakarta.faces.context.FacesContext-java.lang.String-">getState</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;viewId)</code>
<div class="block">
<span class="changed_modified_2_2">The</span> implementation must inspect the current request and return an Object
representing the tree structure and component state passed in to a previous invocation of
<a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-"><code>writeState(jakarta.faces.context.FacesContext,java.lang.Object)</code></a>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#getViewState-jakarta.faces.context.FacesContext-java.lang.Object-">getViewState</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.Object&nbsp;state)</code>
<div class="block">
Return the specified state as a <code>String</code> without any markup related to the rendering technology supported
by this ResponseStateManager.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#isPostback-jakarta.faces.context.FacesContext-">isPostback</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</code>
<div class="block">
Return true if the current request is a postback.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#isStateless-jakarta.faces.context.FacesContext-java.lang.String-">isStateless</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;viewId)</code>
<div class="block"><p class="changed_added_2_2">
If the preceding call to <a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-"><code>writeState(jakarta.faces.context.FacesContext, java.lang.Object)</code></a> was stateless,
return <code>true</code>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-">writeState</a></span>(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.Object&nbsp;state)</code>
<div class="block">
<span class="changed_modified_2_2">Take</span> the argument <code>state</code> and write it into the output using the
current <a href="../../../jakarta/faces/context/ResponseWriter.html" title="class in jakarta.faces.context"><code>ResponseWriter</code></a>, which must be correctly positioned already.</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="RENDER_KIT_ID_PARAM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RENDER_KIT_ID_PARAM</h4>
<pre>public static final&nbsp;java.lang.String RENDER_KIT_ID_PARAM</pre>
<div class="block"><p>
The name of the request parameter used by the default implementation of
<a href="../../../jakarta/faces/application/ViewHandler.html#calculateRenderKitId-jakarta.faces.context.FacesContext-"><code>ViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext)</code></a> to derive a RenderKit ID.
</p></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#jakarta.faces.render.ResponseStateManager.RENDER_KIT_ID_PARAM">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="VIEW_STATE_PARAM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VIEW_STATE_PARAM</h4>
<pre>public static final&nbsp;java.lang.String VIEW_STATE_PARAM</pre>
<div class="block"><p>
<span class="changed_modified_2_0 changed_modified_2_2">Implementations</span> must use this constant field value as
the name of the client parameter in which to save the state between requests. <span class="changed_added_2_2">The
<code>id</code> attribute must be a concatenation of the return from
<a href="../../../jakarta/faces/component/UIComponent.html#getContainerClientId-jakarta.faces.context.FacesContext-"><code>UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)</code></a>, the return from
<a href="../../../jakarta/faces/component/UINamingContainer.html#getSeparatorChar-jakarta.faces.context.FacesContext-"><code>UINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)</code></a>, this constant field value, the separator char,
and a number that is guaranteed to be unique with respect to all the other instances of this kind of client parameter
in the view.</span>
</p>
<p class="changed_added_2_0">
It is strongly recommend that implementations guard against cross site scripting attacks by at least making the value
of this parameter difficult to predict.
</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#jakarta.faces.render.ResponseStateManager.VIEW_STATE_PARAM">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="CLIENT_WINDOW_PARAM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CLIENT_WINDOW_PARAM</h4>
<pre>public static final&nbsp;java.lang.String CLIENT_WINDOW_PARAM</pre>
<div class="block"><p class="changed_added_2_2">
The name of the hidden field that refers to the encoded ClientWindow. This field is only used if
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html#CLIENT_WINDOW_MODE_PARAM_NAME"><code>ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME</code></a> is not "none". The <code>id</code>
attribute must be a concatenation of the return from <a href="../../../jakarta/faces/component/UIComponent.html#getContainerClientId-jakarta.faces.context.FacesContext-"><code>UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)</code></a>,
the return from <a href="../../../jakarta/faces/component/UINamingContainer.html#getSeparatorChar-jakarta.faces.context.FacesContext-"><code>UINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)</code></a>, this constant field value, the
separator char, and a number that is guaranteed to be unique with respect to all the other instances of this kind of
client parameter in the view. The value of this parameter is the return from
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html#getId--"><code>ClientWindow.getId()</code></a>.
</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.render.ResponseStateManager.CLIENT_WINDOW_PARAM">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="CLIENT_WINDOW_URL_PARAM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CLIENT_WINDOW_URL_PARAM</h4>
<pre>public static final&nbsp;java.lang.String CLIENT_WINDOW_URL_PARAM</pre>
<div class="block"><p class="changed_added_2_2">
The name of the URL query parameter for transmitting the client window id. This parameter is only used if
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html#CLIENT_WINDOW_MODE_PARAM_NAME"><code>ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME</code></a> is not "none". The name of the parameter
is given by the constant value of this field. The value of this parameter is the return from
<a href="../../../jakarta/faces/lifecycle/ClientWindow.html#getId--"><code>ClientWindow.getId()</code></a>.
</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.render.ResponseStateManager.CLIENT_WINDOW_URL_PARAM">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="NON_POSTBACK_VIEW_TOKEN_PARAM">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>NON_POSTBACK_VIEW_TOKEN_PARAM</h4>
<pre>public static final&nbsp;java.lang.String NON_POSTBACK_VIEW_TOKEN_PARAM</pre>
<div class="block"><p class="changed_added_2_2">
The value of this constant is taken to be the name of a request parameter whose value is inspected to verify the
safety of an incoming non-postback request with respect to the currently configured <code>Set</code> of protected
views for this application.
</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.render.ResponseStateManager.NON_POSTBACK_VIEW_TOKEN_PARAM">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="ResponseStateManager--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ResponseStateManager</h4>
<pre>public&nbsp;ResponseStateManager()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="writeState-jakarta.faces.context.FacesContext-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeState</h4>
<pre>public&nbsp;void&nbsp;writeState(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.Object&nbsp;state)
throws java.io.IOException</pre>
<div class="block"><p>
<span class="changed_modified_2_2">Take</span> the argument <code>state</code> and write it into the output using the
current <a href="../../../jakarta/faces/context/ResponseWriter.html" title="class in jakarta.faces.context"><code>ResponseWriter</code></a>, which must be correctly positioned already.
</p>
<p class="changed_added_2_2">
Call <a href="../../../jakarta/faces/context/FacesContext.html#getViewRoot--"><code>FacesContext.getViewRoot()</code></a>. If <a href="../../../jakarta/faces/component/StateHolder.html#isTransient--"><code>StateHolder.isTransient()</code></a> returns
<code>true</code>, take implementation specific action so that the following call to <a href="../../../jakarta/faces/render/ResponseStateManager.html#isStateless-jakarta.faces.context.FacesContext-java.lang.String-"><code>isStateless(jakarta.faces.context.FacesContext, java.lang.String)</code></a> returns
<code>true</code> and return. Otherwise, proceed as follows.
</p>
<p>
If the state is to be written out to hidden fields, the implementation must take care to make all necessary character
replacements to make the Strings suitable for inclusion as an HTTP request paramater.
</p>
<p>
If the state saving method for this application is
<a href="../../../jakarta/faces/application/StateManager.html#STATE_SAVING_METHOD_CLIENT"><code>StateManager.STATE_SAVING_METHOD_CLIENT</code></a>, the implementation
<span class="changed_modified_2_2">must</span> encrypt the state to be saved to the client
<span class="changed_modified_2_2">in a tamper evident manner</span>.
</p>
<p>
If the state saving method for this application is
<a href="../../../jakarta/faces/application/StateManager.html#STATE_SAVING_METHOD_SERVER"><code>StateManager.STATE_SAVING_METHOD_SERVER</code></a>, and the current request is an
<code>Ajax</code> request <a href="../../../jakarta/faces/context/PartialViewContext.html#isAjaxRequest--"><code>PartialViewContext.isAjaxRequest()</code></a> returns <code>true</code>),
use the current view state identifier if it is available (do not generate a new identifier).
</p>
<p>
Write out the render kit identifier associated with this <code>ResponseStateManager</code> implementation with the
name as the value of the <code>String</code> constant <code>ResponseStateManager.RENDER_KIT_ID_PARAM</code>. The
render kit identifier must not be written if:
</p>
<ul>
<li>it is the default render kit identifier as returned by
<a href="../../../jakarta/faces/application/Application.html#getDefaultRenderKitId--"><code>Application.getDefaultRenderKitId()</code></a> or</li>
<li>the render kit identfier is the value of <code>jakarta.faces.render.RenderKitFactory.HTML_BASIC_RENDER_KIT</code>
and <a href="../../../jakarta/faces/application/Application.html#getDefaultRenderKitId--"><code>Application.getDefaultRenderKitId()</code></a> returns <code>null</code>.</li>
</ul>
<p class="changed_added_2_2">
The <a href="../../../jakarta/faces/lifecycle/ClientWindow.html" title="class in jakarta.faces.lifecycle"><code>ClientWindow</code></a> must be written using these steps. Call
<a href="../../../jakarta/faces/context/ExternalContext.html#getClientWindow--"><code>ExternalContext.getClientWindow()</code></a>. If the result is <code>null</code>, take no further
action regarding the <code>ClientWindow</code>. If the result is non-<code>null</code>, write a hidden field whose
name is <a href="../../../jakarta/faces/render/ResponseStateManager.html#CLIENT_WINDOW_PARAM"><code>CLIENT_WINDOW_PARAM</code></a> and whose id is
<code>&lt;VIEW_ROOT_CONTAINER_CLIENT_ID&gt;&lt;SEP&gt;jakarta.faces.ClientWindow&lt;SEP&gt;&lt;UNIQUE_PER_VIEW_NUMBER&gt;</code>
where &lt;SEP&gt; is the currently configured <code>UINamingContainer.getSeparatorChar()</code>.
&lt;VIEW_ROOT_CONTAINER_CLIENT_ID&gt; is the return from <code>UIViewRoot.getContainerClientId()</code> on the view
from whence this state originated. &lt;UNIQUE_PER_VIEW_NUMBER&gt; is a number that must be unique within this view,
but must not be included in the view state. The value of the field is implementation dependent but must uniquely
identify this window within the user's session.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - The <a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context"><code>FacesContext</code></a> instance for the current request</dd>
<dd><code>state</code> - The serialized state information previously saved</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code> - if the state argument is not an array of length 2.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
</dl>
</li>
</ul>
<a name="isStateless-jakarta.faces.context.FacesContext-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isStateless</h4>
<pre>public&nbsp;boolean&nbsp;isStateless(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;viewId)</pre>
<div class="block"><p class="changed_added_2_2">
If the preceding call to <a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-"><code>writeState(jakarta.faces.context.FacesContext, java.lang.Object)</code></a> was stateless,
return <code>true</code>. If the preceding call to <code>writeState()</code> was stateful, return <code>false</code>. Otherwise
throw <code>IllegalStateException</code>.
</p>
<div class="changed_added_2_2">
<p>
To preserve backward compatibility with custom implementations that may have extended from an earlier version of this
class, an implementation is provided that returns <code>false</code>. A compliant implementation must override this
method to take the specified action.
</p>
</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - The <a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context"><code>FacesContext</code></a> instance for the current request</dd>
<dd><code>viewId</code> - View identifier of the view to be restored</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the value of the statelessness of this run through the lifecycle.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if the argument <code>context</code> is <code>null</code>.</dd>
<dd><code>java.lang.IllegalStateException</code> - if this method is invoked and the statefulness of the preceding call to
<a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-"><code>writeState(jakarta.faces.context.FacesContext, java.lang.Object)</code></a> cannot be determined.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.2</dd>
</dl>
</li>
</ul>
<a name="getState-jakarta.faces.context.FacesContext-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
<pre>public&nbsp;java.lang.Object&nbsp;getState(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.String&nbsp;viewId)</pre>
<div class="block"><p>
<span class="changed_modified_2_2">The</span> implementation must inspect the current request and return an Object
representing the tree structure and component state passed in to a previous invocation of
<a href="../../../jakarta/faces/render/ResponseStateManager.html#writeState-jakarta.faces.context.FacesContext-java.lang.Object-"><code>writeState(jakarta.faces.context.FacesContext,java.lang.Object)</code></a>.
</p>
<p class="changed_added_2_2">
If the state saving method for this application is
<a href="../../../jakarta/faces/application/StateManager.html#STATE_SAVING_METHOD_CLIENT"><code>StateManager.STATE_SAVING_METHOD_CLIENT</code></a>, <code>writeState()</code> will have
encrypted the state in a tamper evident manner. If the state fails to decrypt, or decrypts but indicates evidence of
tampering, a <a href="../../../jakarta/faces/application/ProtectedViewException.html" title="class in jakarta.faces.application"><code>ProtectedViewException</code></a> must be thrown.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - The <a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context"><code>FacesContext</code></a> instance for the current request</dd>
<dd><code>viewId</code> - View identifier of the view to be restored</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the tree structure and component state Object passed in to <code>writeState</code>. If this is an initial
request, this method returns <code>null</code>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
</dl>
</li>
</ul>
<a name="isPostback-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isPostback</h4>
<pre>public&nbsp;boolean&nbsp;isPostback(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context)</pre>
<div class="block"><p>
Return true if the current request is a postback. This method is leveraged from the <i>Restore View Phase</i> to
determine if <a href="../../../jakarta/faces/application/ViewHandler.html#restoreView-jakarta.faces.context.FacesContext-java.lang.String-"><code>ViewHandler.restoreView(jakarta.faces.context.FacesContext, java.lang.String)</code></a> or
<a href="../../../jakarta/faces/application/ViewHandler.html#createView-jakarta.faces.context.FacesContext-java.lang.String-"><code>ViewHandler.createView(jakarta.faces.context.FacesContext, java.lang.String)</code></a> should be called. The default implementation must return
<code>true</code> if this <code>ResponseStateManager</code> instance wrote out state on a previous request to which
this request is a postback, <code>false</code> otherwise.
</p>
<p>
The implementation of this method for the Standard HTML RenderKit must consult the
<a href="../../../jakarta/faces/context/ExternalContext.html" title="class in jakarta.faces.context"><code>ExternalContext</code></a>'s <code>requestParameterMap</code> and return <code>true</code> if and
only if there is a key equal to the value of the symbolic constant <a href="../../../jakarta/faces/render/ResponseStateManager.html#VIEW_STATE_PARAM"><code>VIEW_STATE_PARAM</code></a>.
</p>
<p>
For backwards compatibility with implementations of <code>ResponseStateManager</code> prior to Jakarta Faces
1.2, a default implementation is provided that consults the <a href="../../../jakarta/faces/context/ExternalContext.html" title="class in jakarta.faces.context"><code>ExternalContext</code></a>'s
<code>requestParameterMap</code> and return <code>true</code> if its size is greater than 0.
</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 value as specified above</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
</dl>
</li>
</ul>
<a name="getViewState-jakarta.faces.context.FacesContext-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getViewState</h4>
<pre>public&nbsp;java.lang.String&nbsp;getViewState(<a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context">FacesContext</a>&nbsp;context,
java.lang.Object&nbsp;state)</pre>
<div class="block"><p>
Return the specified state as a <code>String</code> without any markup related to the rendering technology supported
by this ResponseStateManager.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context"><code>FacesContext</code></a> for the current request</dd>
<dd><code>state</code> - the state from which the String version will be generated from</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the view state for this request without any markup specifics</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.0</dd>
</dl>
</li>
</ul>
<a name="getCryptographicallyStrongTokenFromSession-jakarta.faces.context.FacesContext-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getCryptographicallyStrongTokenFromSession</h4>
<pre>public&nbsp;java.lang.String&nbsp;getCryptographicallyStrongTokenFromSession(<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">
Compliant implementations must return a cryptographically strong token for use to protect views in this application.
For backwards compatibility with earlier revisions, a default implementation is provided that simply returns
<code>null</code>.
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the <a href="../../../jakarta/faces/context/FacesContext.html" title="class in jakarta.faces.context"><code>FacesContext</code></a> for the current request</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a cryptographically strong value</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/render/RenderKitWrapper.html" title="class in jakarta.faces.render"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?jakarta/faces/render/ResponseStateManager.html" target="_top">Frames</a></li>
<li><a href="ResponseStateManager.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>