blob: 0af3e62783bc47bd351168f6fff5f90de5622c05 [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>DefaultObjectWrapper (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="DefaultObjectWrapper (FreeMarker 2.3.32 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static 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="class-use/DefaultObjectWrapper.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/DefaultNonListCollectionAdapter.html" title="class in freemarker.template"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/template/DefaultObjectWrapperBuilder.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/DefaultObjectWrapper.html" target="_top">Frames</a></li>
<li><a href="DefaultObjectWrapper.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><a href="#nested.classes.inherited.from.class.freemarker.ext.beans.BeansWrapper">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.freemarker.ext.beans.BeansWrapper">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>Field&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">freemarker.template</div>
<h2 title="Class DefaultObjectWrapper" class="title">Class DefaultObjectWrapper</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">freemarker.ext.beans.BeansWrapper</a></li>
<li>
<ul class="inheritance">
<li>freemarker.template.DefaultObjectWrapper</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../freemarker/template/ObjectWrapper.html" title="interface in freemarker.template">ObjectWrapper</a>, <a href="../../freemarker/template/ObjectWrapperAndUnwrapper.html" title="interface in freemarker.template">ObjectWrapperAndUnwrapper</a>, <a href="../../freemarker/template/utility/ObjectWrapperWithAPISupport.html" title="interface in freemarker.template.utility">ObjectWrapperWithAPISupport</a>, <a href="../../freemarker/template/utility/RichObjectWrapper.html" title="interface in freemarker.template.utility">RichObjectWrapper</a>, <a href="../../freemarker/template/utility/WriteProtectable.html" title="interface in freemarker.template.utility">WriteProtectable</a></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../freemarker/template/SimpleObjectWrapper.html" title="class in freemarker.template">SimpleObjectWrapper</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">DefaultObjectWrapper</span>
extends <a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></pre>
<div class="block">The default implementation of the <a href="../../freemarker/template/ObjectWrapper.html" title="interface in freemarker.template"><code>ObjectWrapper</code></a> interface. Usually, you don't need to create instances of
this, as an instance of this is already the default value of the
<a href="../../freemarker/template/Configuration.html#setObjectWrapper-freemarker.template.ObjectWrapper-"><code>object_wrapper setting</code></a>. Then the
<a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-"><code>incompatibleImprovements</code></a> of the <a href="../../freemarker/template/DefaultObjectWrapper.html" title="class in freemarker.template"><code>DefaultObjectWrapper</code></a> will be the same
that you have set for the <a href="../../freemarker/template/Configuration.html" title="class in freemarker.template"><code>Configuration</code></a> itself. As of this writing, it's highly recommended to use
<a href="../../freemarker/template/Configuration.html#Configuration-freemarker.template.Version-"><code>incompatibleImprovements</code></a> 2.3.22 (or higher).
<p>
If you still need to create an instance, that should be done with an <a href="../../freemarker/template/DefaultObjectWrapperBuilder.html" title="class in freemarker.template"><code>DefaultObjectWrapperBuilder</code></a> (or
with <a href="../../freemarker/template/Configuration.html#setSetting-java.lang.String-java.lang.String-"><code>Configuration.setSetting(String, String)</code></a> with <code>"object_wrapper"</code> key), not with
its constructor, as that allows FreeMarker to reuse singletons. For new projects, it's recommended to set
<a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html#setForceLegacyNonListCollections-boolean-"><code>forceLegacyNonListCollections</code></a> to
<code>false</code>, and <a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html#setIterableSupport-boolean-"><code>iterableSupport</code></a> to <code>true</code>;
setting <code>incompatibleImprovements</code> to 2.3.22 won't do these, as they could break legacy templates too easily.
<p>
This class is only thread-safe after you have finished calling its setter methods, and then safely published it (see
JSR 133 and related literature). When used as part of <a href="../../freemarker/template/Configuration.html" title="class in freemarker.template"><code>Configuration</code></a>, of course it's enough if that was safely
published and then left unmodified.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.freemarker.ext.beans.BeansWrapper">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;freemarker.ext.beans.<a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></h3>
<code><a href="../../freemarker/ext/beans/BeansWrapper.MethodAppearanceDecision.html" title="class in freemarker.ext.beans">BeansWrapper.MethodAppearanceDecision</a>, <a href="../../freemarker/ext/beans/BeansWrapper.MethodAppearanceDecisionInput.html" title="class in freemarker.ext.beans">BeansWrapper.MethodAppearanceDecisionInput</a></code></li>
</ul>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.freemarker.ext.beans.BeansWrapper">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;freemarker.ext.beans.<a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></h3>
<code><a href="../../freemarker/ext/beans/BeansWrapper.html#EXPOSE_ALL">EXPOSE_ALL</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#EXPOSE_NOTHING">EXPOSE_NOTHING</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#EXPOSE_PROPERTIES_ONLY">EXPOSE_PROPERTIES_ONLY</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#EXPOSE_SAFE">EXPOSE_SAFE</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.freemarker.template.ObjectWrapperAndUnwrapper">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;freemarker.template.<a href="../../freemarker/template/ObjectWrapperAndUnwrapper.html" title="interface in freemarker.template">ObjectWrapperAndUnwrapper</a></h3>
<code><a href="../../freemarker/template/ObjectWrapperAndUnwrapper.html#CANT_UNWRAP_TO_TARGET_CLASS">CANT_UNWRAP_TO_TARGET_CLASS</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.freemarker.template.ObjectWrapper">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;freemarker.template.<a href="../../freemarker/template/ObjectWrapper.html" title="interface in freemarker.template">ObjectWrapper</a></h3>
<code><a href="../../freemarker/template/ObjectWrapper.html#BEANS_WRAPPER">BEANS_WRAPPER</a>, <a href="../../freemarker/template/ObjectWrapper.html#DEFAULT_WRAPPER">DEFAULT_WRAPPER</a>, <a href="../../freemarker/template/ObjectWrapper.html#SIMPLE_WRAPPER">SIMPLE_WRAPPER</a></code></li>
</ul>
</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="colFirst" scope="col">Modifier</th>
<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper--">DefaultObjectWrapper</a></span>()</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">Use <a href="../../freemarker/template/DefaultObjectWrapperBuilder.html" title="class in freemarker.template"><code>DefaultObjectWrapperBuilder</code></a>, or in rare cases,
<a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-"><code>DefaultObjectWrapper(Version)</code></a> instead.</span></div>
</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.ext.beans.BeansWrapperConfiguration-boolean-">DefaultObjectWrapper</a></span>(<a href="../../freemarker/ext/beans/BeansWrapperConfiguration.html" title="class in freemarker.ext.beans">BeansWrapperConfiguration</a>&nbsp;bwCfg,
boolean&nbsp;writeProtected)</code>
<div class="block">Use <a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.DefaultObjectWrapperConfiguration-boolean-"><code>DefaultObjectWrapper(DefaultObjectWrapperConfiguration, boolean)</code></a> instead if possible;
it does the same, except that it tolerates a non-<a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html" title="class in freemarker.template"><code>DefaultObjectWrapperConfiguration</code></a> configuration too.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.DefaultObjectWrapperConfiguration-boolean-">DefaultObjectWrapper</a></span>(<a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html" title="class in freemarker.template">DefaultObjectWrapperConfiguration</a>&nbsp;dowCfg,
boolean&nbsp;writeProtected)</code>
<div class="block">Calls <a href="../../freemarker/ext/beans/BeansWrapper.html#BeansWrapper-freemarker.ext.beans.BeansWrapperConfiguration-boolean-"><code>BeansWrapper.BeansWrapper(BeansWrapperConfiguration, boolean)</code></a> and sets up
<a href="../../freemarker/template/DefaultObjectWrapper.html" title="class in freemarker.template"><code>DefaultObjectWrapper</code></a>-specific fields.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-">DefaultObjectWrapper</a></span>(<a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a>&nbsp;incompatibleImprovements)</code>
<div class="block">Use <a href="../../freemarker/template/DefaultObjectWrapperBuilder.html" title="class in freemarker.template"><code>DefaultObjectWrapperBuilder</code></a> instead if possible.</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="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></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>protected java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#convertArray-java.lang.Object-">convertArray</a></span>(java.lang.Object&nbsp;arr)</code>
<div class="block">Converts an array to a java.util.List.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#getDOMNodeSupport--">getDOMNodeSupport</a></span>()</code>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setDOMNodeSupport-boolean-"><code>setDOMNodeSupport(boolean)</code></a>; see there.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#getForceLegacyNonListCollections--">getForceLegacyNonListCollections</a></span>()</code>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-"><code>setForceLegacyNonListCollections(boolean)</code></a>; see there.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#getIterableSupport--">getIterableSupport</a></span>()</code>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setIterableSupport-boolean-"><code>setIterableSupport(boolean)</code></a>; see there.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#getJythonSupport--">getJythonSupport</a></span>()</code>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setJythonSupport-boolean-"><code>setJythonSupport(boolean)</code></a>; see there.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#getUseAdaptersForContainers--">getUseAdaptersForContainers</a></span>()</code>
<div class="block">The getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-"><code>setUseAdaptersForContainers(boolean)</code></a>.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#handleUnknownType-java.lang.Object-">handleUnknownType</a></span>(java.lang.Object&nbsp;obj)</code>
<div class="block">Called for an object that isn't considered to be of a "basic" Java type, like for an application specific type,
or for a W3C DOM node.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>protected static <a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#normalizeIncompatibleImprovementsVersion-freemarker.template.Version-">normalizeIncompatibleImprovementsVersion</a></span>(<a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a>&nbsp;incompatibleImprovements)</code>
<div class="block">Returns the lowest version number that is equivalent with the parameter version.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#setDOMNodeSupport-boolean-">setDOMNodeSupport</a></span>(boolean&nbsp;domNodeSupport)</code>
<div class="block">Enables wrapping <code>Node</code>-s on a special way (as described in the "XML Processing Guide" in the Manual);
defaults to <code>true</code>..</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-">setForceLegacyNonListCollections</a></span>(boolean&nbsp;forceLegacyNonListCollections)</code>
<div class="block">Specifies whether non-<code>List</code> <code>Collection</code>-s (like <code>Set</code>-s) must be wrapped by pre-fetching into
a <a href="../../freemarker/template/SimpleSequence.html" title="class in freemarker.template"><code>SimpleSequence</code></a>.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#setIterableSupport-boolean-">setIterableSupport</a></span>(boolean&nbsp;iterableSupport)</code>
<div class="block">Specifies whether <code>Iterable</code>-s (not to be confused with <code>Iterator</code>-s) that don't implement any other
recognized Java interfaces (most notably <code>Collection</code>) will be recognized as listable objects
(<a href="../../freemarker/template/TemplateCollectionModel.html" title="interface in freemarker.template"><code>TemplateCollectionModel</code></a>-s), or they will be just seen as generic objects (JavaBean-s).</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#setJythonSupport-boolean-">setJythonSupport</a></span>(boolean&nbsp;jythonSupport)</code>
<div class="block">Enables wrapping Jython objects in a special way; defaults to <code>true</code>.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-">setUseAdaptersForContainers</a></span>(boolean&nbsp;useAdaptersForContainers)</code>
<div class="block">Sets if to wrap container objects (<code>Map</code>-s, <code>List</code>-s, arrays and such) the legacy copying approach or
the newer adapter approach should be used.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>protected java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#toPropertiesString--">toPropertiesString</a></span>()</code>
<div class="block">Returns the name-value pairs that describe the configuration of this <a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans"><code>BeansWrapper</code></a>; called from
<a href="../../freemarker/ext/beans/BeansWrapper.html#toString--"><code>BeansWrapper.toString()</code></a>.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#wrap-java.lang.Object-">wrap</a></span>(java.lang.Object&nbsp;obj)</code>
<div class="block">Wraps the parameter object to <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a> interface(s).</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code><a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/template/DefaultObjectWrapper.html#wrapDomNode-java.lang.Object-">wrapDomNode</a></span>(java.lang.Object&nbsp;obj)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.freemarker.ext.beans.BeansWrapper">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;freemarker.ext.beans.<a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></h3>
<code><a href="../../freemarker/ext/beans/BeansWrapper.html#checkModifiable--">checkModifiable</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#clearClassIntrospecitonCache--">clearClassIntrospecitonCache</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#clearClassIntrospectionCache--">clearClassIntrospectionCache</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#coerceBigDecimal-java.math.BigDecimal-java.lang.Class-">coerceBigDecimal</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#coerceBigDecimals-java.lang.reflect.AccessibleObject-java.lang.Object:A-">coerceBigDecimals</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#coerceBigDecimals-java.lang.Class:A-java.lang.Object:A-">coerceBigDecimals</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#finalizeConstruction-boolean-">finalizeConstruction</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#finetuneMethodAppearance-java.lang.Class-java.lang.reflect.Method-freemarker.ext.beans.BeansWrapper.MethodAppearanceDecision-">finetuneMethodAppearance</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getDefaultDateType--">getDefaultDateType</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getDefaultInstance--">getDefaultInstance</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getEnumModels--">getEnumModels</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getExposureLevel--">getExposureLevel</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getIncompatibleImprovements--">getIncompatibleImprovements</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getInstance-java.lang.Object-freemarker.ext.util.ModelFactory-">getInstance</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getMemberAccessPolicy--">getMemberAccessPolicy</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getMethodAppearanceFineTuner--">getMethodAppearanceFineTuner</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getModelFactory-java.lang.Class-">getModelFactory</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getOuterIdentity--">getOuterIdentity</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getPreferIndexedReadMethod--">getPreferIndexedReadMethod</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getStaticModels--">getStaticModels</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getTreatDefaultMethodsAsBeanMembers--">getTreatDefaultMethodsAsBeanMembers</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#getUseCache--">getUseCache</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#invokeMethod-java.lang.Object-java.lang.reflect.Method-java.lang.Object:A-">invokeMethod</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#isClassIntrospectionCacheRestricted--">isClassIntrospectionCacheRestricted</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#isExposeFields--">isExposeFields</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#isSimpleMapWrapper--">isSimpleMapWrapper</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#isStrict--">isStrict</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#isWriteProtected--">isWriteProtected</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#newInstance-java.lang.Class-java.util.List-">newInstance</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#readField-java.lang.Object-java.lang.reflect.Field-">readField</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#removeFromClassIntrospectionCache-java.lang.Class-">removeFromClassIntrospectionCache</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setDefaultDateType-int-">setDefaultDateType</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setExposeFields-boolean-">setExposeFields</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setExposureLevel-int-">setExposureLevel</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setMemberAccessPolicy-freemarker.ext.beans.MemberAccessPolicy-">setMemberAccessPolicy</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setMethodAppearanceFineTuner-freemarker.ext.beans.MethodAppearanceFineTuner-">setMethodAppearanceFineTuner</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setMethodsShadowItems-boolean-">setMethodsShadowItems</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setNullModel-freemarker.template.TemplateModel-">setNullModel</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setOuterIdentity-freemarker.template.ObjectWrapper-">setOuterIdentity</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setPreferIndexedReadMethod-boolean-">setPreferIndexedReadMethod</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setSimpleMapWrapper-boolean-">setSimpleMapWrapper</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setStrict-boolean-">setStrict</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setTreatDefaultMethodsAsBeanMembers-boolean-">setTreatDefaultMethodsAsBeanMembers</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#setUseCache-boolean-">setUseCache</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#toString--">toString</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#tryUnwrapTo-freemarker.template.TemplateModel-java.lang.Class-">tryUnwrapTo</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#unwrap-freemarker.template.TemplateModel-">unwrap</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#unwrap-freemarker.template.TemplateModel-java.lang.Class-">unwrap</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#wrap-java.lang.Object-java.lang.reflect.Method-">wrap</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#wrapAsAPI-java.lang.Object-">wrapAsAPI</a>, <a href="../../freemarker/ext/beans/BeansWrapper.html#writeProtect--">writeProtect</a></code></li>
</ul>
<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, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="DefaultObjectWrapper--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DefaultObjectWrapper</h4>
<pre>@Deprecated
public&nbsp;DefaultObjectWrapper()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../freemarker/template/DefaultObjectWrapperBuilder.html" title="class in freemarker.template"><code>DefaultObjectWrapperBuilder</code></a>, or in rare cases,
<a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-"><code>DefaultObjectWrapper(Version)</code></a> instead.</span></div>
<div class="block">Creates a new instance with the incompatible-improvements-version specified in
<a href="../../freemarker/template/Configuration.html#DEFAULT_INCOMPATIBLE_IMPROVEMENTS"><code>Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS</code></a>.</div>
</li>
</ul>
<a name="DefaultObjectWrapper-freemarker.template.Version-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DefaultObjectWrapper</h4>
<pre>public&nbsp;DefaultObjectWrapper(<a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a>&nbsp;incompatibleImprovements)</pre>
<div class="block">Use <a href="../../freemarker/template/DefaultObjectWrapperBuilder.html" title="class in freemarker.template"><code>DefaultObjectWrapperBuilder</code></a> instead if possible. Instances created with this constructor won't share
the class introspection caches with other instances. See <a href="../../freemarker/ext/beans/BeansWrapper.html#BeansWrapper-freemarker.template.Version-"><code>BeansWrapper.BeansWrapper(Version)</code></a> (the
superclass constructor) for more details.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>incompatibleImprovements</code> - It's the same as in <a href="../../freemarker/ext/beans/BeansWrapper.html#BeansWrapper-freemarker.template.Version-"><code>BeansWrapper.BeansWrapper(Version)</code></a>, plus these changes:
<ul>
<li>2.3.22 (or higher): The default value of
<a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-"><code>useAdaptersForContainers</code></a> changes to
<code>true</code>.</li>
<li>2.3.24 (or higher): When wrapping an <code>Iterator</code>, operations on it that only check if the
collection is empty without reading an element from it, such as <code>?has_content</code>,
won't cause the a later iteration (or further emptiness check) to fail anymore. Earlier, in
certain situations, the second operation has failed saying that the iterator "can be listed only
once".
<li>2.3.26 (or higher): <code>Enumeration</code>-s are wrapped into <a href="../../freemarker/template/DefaultEnumerationAdapter.html" title="class in freemarker.template"><code>DefaultEnumerationAdapter</code></a>
instead of into <a href="../../freemarker/ext/beans/EnumerationModel.html" title="class in freemarker.ext.beans"><code>EnumerationModel</code></a> (as far as
<a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-"><code>useAdaptersForContainers</code></a> is <code>true</code>, which is
the default). This adapter is cleaner than <a href="../../freemarker/ext/beans/EnumerationModel.html" title="class in freemarker.ext.beans"><code>EnumerationModel</code></a> as it only implements the
minimally required FTL type, which avoids some ambiguous situations. (Note that Java API methods
aren't exposed anymore as subvariables; if you really need them, you can use <code>?api</code>).
</li>
</ul></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
</dl>
</li>
</ul>
<a name="DefaultObjectWrapper-freemarker.ext.beans.BeansWrapperConfiguration-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DefaultObjectWrapper</h4>
<pre>protected&nbsp;DefaultObjectWrapper(<a href="../../freemarker/ext/beans/BeansWrapperConfiguration.html" title="class in freemarker.ext.beans">BeansWrapperConfiguration</a>&nbsp;bwCfg,
boolean&nbsp;writeProtected)</pre>
<div class="block">Use <a href="../../freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.DefaultObjectWrapperConfiguration-boolean-"><code>DefaultObjectWrapper(DefaultObjectWrapperConfiguration, boolean)</code></a> instead if possible;
it does the same, except that it tolerates a non-<a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html" title="class in freemarker.template"><code>DefaultObjectWrapperConfiguration</code></a> configuration too.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
</dl>
</li>
</ul>
<a name="DefaultObjectWrapper-freemarker.template.DefaultObjectWrapperConfiguration-boolean-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DefaultObjectWrapper</h4>
<pre>protected&nbsp;DefaultObjectWrapper(<a href="../../freemarker/template/DefaultObjectWrapperConfiguration.html" title="class in freemarker.template">DefaultObjectWrapperConfiguration</a>&nbsp;dowCfg,
boolean&nbsp;writeProtected)</pre>
<div class="block">Calls <a href="../../freemarker/ext/beans/BeansWrapper.html#BeansWrapper-freemarker.ext.beans.BeansWrapperConfiguration-boolean-"><code>BeansWrapper.BeansWrapper(BeansWrapperConfiguration, boolean)</code></a> and sets up
<a href="../../freemarker/template/DefaultObjectWrapper.html" title="class in freemarker.template"><code>DefaultObjectWrapper</code></a>-specific fields.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</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="wrap-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>wrap</h4>
<pre>public&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;wrap(java.lang.Object&nbsp;obj)
throws <a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a></pre>
<div class="block">Wraps the parameter object to <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a> interface(s). Simple types like numbers, strings, booleans
and dates will be wrapped into the corresponding <code>SimpleXxx</code> classes (like <a href="../../freemarker/template/SimpleNumber.html" title="class in freemarker.template"><code>SimpleNumber</code></a>).
<code>Map</code>-s, <code>List</code>-s, other <code>Collection</code>-s, arrays and <code>Iterator</code>-s will be wrapped into the
corresponding <code>SimpleXxx</code> or <code>DefaultXxxAdapter</code> classes (like <a href="../../freemarker/template/SimpleHash.html" title="class in freemarker.template"><code>SimpleHash</code></a> or
<a href="../../freemarker/template/DefaultMapAdapter.html" title="class in freemarker.template"><code>DefaultMapAdapter</code></a>), depending on <a href="../../freemarker/template/DefaultObjectWrapper.html#getUseAdaptersForContainers--"><code>getUseAdaptersForContainers()</code></a> and
<a href="../../freemarker/template/DefaultObjectWrapper.html#getForceLegacyNonListCollections--"><code>getForceLegacyNonListCollections()</code></a>. After that, the wrapping is handled by
<a href="../../freemarker/template/DefaultObjectWrapper.html#handleUnknownType-java.lang.Object-"><code>handleUnknownType(Object)</code></a>, so see more there.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/template/ObjectWrapper.html#wrap-java.lang.Object-">wrap</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/template/ObjectWrapper.html" title="interface in freemarker.template">ObjectWrapper</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../freemarker/ext/beans/BeansWrapper.html#wrap-java.lang.Object-">wrap</a></code>&nbsp;in class&nbsp;<code><a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>obj</code> - The object to wrap into a <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a>. If it already implements <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a>,
it should just return the object as is. If it's <code>null</code>, the method should return <code>null</code>
(however, <a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans"><code>BeansWrapper</code></a>, has a legacy option for returning a null model object instead, but it's not
a good idea).</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a> wrapper of the object passed in. To support un-wrapping, you may consider the
return value to implement <a href="../../freemarker/ext/util/WrapperTemplateModel.html" title="interface in freemarker.ext.util"><code>WrapperTemplateModel</code></a> and <a href="../../freemarker/template/AdapterTemplateModel.html" title="interface in freemarker.template"><code>AdapterTemplateModel</code></a>.
The default expectation is that the <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template"><code>TemplateModel</code></a> isn't less thread safe than the wrapped object.
If the <a href="../../freemarker/template/ObjectWrapper.html" title="interface in freemarker.template"><code>ObjectWrapper</code></a> returns less thread safe objects, that should be clearly documented, as it
restricts how it can be used, like, then it can't be used to wrap "shared variables"
(<a href="../../freemarker/template/Configuration.html#setSharedVaribles-java.util.Map-"><code>Configuration.setSharedVaribles(Map)</code></a>).</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>
</dl>
</li>
</ul>
<a name="handleUnknownType-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleUnknownType</h4>
<pre>protected&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;handleUnknownType(java.lang.Object&nbsp;obj)
throws <a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a></pre>
<div class="block">Called for an object that isn't considered to be of a "basic" Java type, like for an application specific type,
or for a W3C DOM node. In its default implementation, W3C <code>Node</code>-s will be wrapped as <a href="../../freemarker/ext/dom/NodeModel.html" title="class in freemarker.ext.dom"><code>NodeModel</code></a>-s
(allows DOM tree traversal), Jython objects will be delegated to the <code>JythonWrapper</code>, others will be
wrapped using <a href="../../freemarker/ext/beans/BeansWrapper.html#wrap-java.lang.Object-"><code>BeansWrapper.wrap(Object)</code></a>. However, these can be turned off with the
<a href="../../freemarker/template/DefaultObjectWrapper.html#setDOMNodeSupport-boolean-"><code>setDOMNodeSupport(boolean)</code></a> and <a href="../../freemarker/template/DefaultObjectWrapper.html#setJythonSupport-boolean-"><code>setJythonSupport(boolean)</code></a>. Note that if
<a href="../../freemarker/ext/beans/BeansWrapper.html#getMemberAccessPolicy--"><code>BeansWrapper.getMemberAccessPolicy()</code></a> doesn't return a <a href="../../freemarker/ext/beans/DefaultMemberAccessPolicy.html" title="class in freemarker.ext.beans"><code>DefaultMemberAccessPolicy</code></a> or
<a href="../../freemarker/ext/beans/LegacyDefaultMemberAccessPolicy.html" title="class in freemarker.ext.beans"><code>LegacyDefaultMemberAccessPolicy</code></a>, then Jython wrapper will be skipped for security reasons.
<p>
When you override this method, you should first decide if you want to wrap the object in a custom way (and if so
then do it and return with the result), and if not, then you should call the super method (assuming the default
behavior is fine with you).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateModelException.html" title="class in freemarker.template">TemplateModelException</a></code></dd>
</dl>
</li>
</ul>
<a name="wrapDomNode-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>wrapDomNode</h4>
<pre>public&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;wrapDomNode(java.lang.Object&nbsp;obj)</pre>
</li>
</ul>
<a name="convertArray-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>convertArray</h4>
<pre>protected&nbsp;java.lang.Object&nbsp;convertArray(java.lang.Object&nbsp;arr)</pre>
<div class="block">Converts an array to a java.util.List.</div>
</li>
</ul>
<a name="getUseAdaptersForContainers--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUseAdaptersForContainers</h4>
<pre>public&nbsp;boolean&nbsp;getUseAdaptersForContainers()</pre>
<div class="block">The getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-"><code>setUseAdaptersForContainers(boolean)</code></a>.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</dd>
</dl>
</li>
</ul>
<a name="setUseAdaptersForContainers-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setUseAdaptersForContainers</h4>
<pre>public&nbsp;void&nbsp;setUseAdaptersForContainers(boolean&nbsp;useAdaptersForContainers)</pre>
<div class="block">Sets if to wrap container objects (<code>Map</code>-s, <code>List</code>-s, arrays and such) the legacy copying approach or
the newer adapter approach should be used. <code>true</code> is recommended, which is also the default when the
<code>incompatible_improvements</code> of this instance was set to <a href="../../freemarker/template/Configuration.html#VERSION_2_3_22"><code>Configuration.VERSION_2_3_22</code></a> or higher. To
understand the difference, check some of the classes that implement the two approaches:
<ul>
<li>Copying approach: <a href="../../freemarker/template/SimpleHash.html" title="class in freemarker.template"><code>SimpleHash</code></a>, <a href="../../freemarker/template/SimpleSequence.html" title="class in freemarker.template"><code>SimpleSequence</code></a></li>
<li>Adapter approach: <a href="../../freemarker/template/DefaultMapAdapter.html" title="class in freemarker.template"><code>DefaultMapAdapter</code></a>, <a href="../../freemarker/template/DefaultListAdapter.html" title="class in freemarker.template"><code>DefaultListAdapter</code></a>, <a href="../../freemarker/template/DefaultArrayAdapter.html" title="class in freemarker.template"><code>DefaultArrayAdapter</code></a>,
<a href="../../freemarker/template/DefaultIteratorAdapter.html" title="class in freemarker.template"><code>DefaultIteratorAdapter</code></a></li>
</ul>
<p>
See also the related Version History entry under 2.3.22 in the FreeMarker Manual, which gives a breakdown of
the consequences.
<p>
<b>Attention:</b> For backward compatibility, currently, non-<code>List</code> collections (like <code>Set</code>-s) will
only be wrapped with adapter approach (with <a href="../../freemarker/template/DefaultNonListCollectionAdapter.html" title="class in freemarker.template"><code>DefaultNonListCollectionAdapter</code></a>) if
<a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-"><code>forceLegacyNonListCollections</code></a> was set to <code>false</code>.
Currently the default is <code>true</code>, but in new projects you should set it to <code>false</code>. See
<a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-"><code>setForceLegacyNonListCollections(boolean)</code></a> for more.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-"><code>setForceLegacyNonListCollections(boolean)</code></a></dd>
</dl>
</li>
</ul>
<a name="getForceLegacyNonListCollections--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getForceLegacyNonListCollections</h4>
<pre>public&nbsp;boolean&nbsp;getForceLegacyNonListCollections()</pre>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setForceLegacyNonListCollections-boolean-"><code>setForceLegacyNonListCollections(boolean)</code></a>; see there.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</dd>
</dl>
</li>
</ul>
<a name="setForceLegacyNonListCollections-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setForceLegacyNonListCollections</h4>
<pre>public&nbsp;void&nbsp;setForceLegacyNonListCollections(boolean&nbsp;forceLegacyNonListCollections)</pre>
<div class="block">Specifies whether non-<code>List</code> <code>Collection</code>-s (like <code>Set</code>-s) must be wrapped by pre-fetching into
a <a href="../../freemarker/template/SimpleSequence.html" title="class in freemarker.template"><code>SimpleSequence</code></a>. The modern approach is wrapping into a <a href="../../freemarker/template/DefaultNonListCollectionAdapter.html" title="class in freemarker.template"><code>DefaultNonListCollectionAdapter</code></a>. This
setting only has effect when <a href="../../freemarker/template/DefaultObjectWrapper.html#getUseAdaptersForContainers--"><code>getUseAdaptersForContainers()</code></a> is also <code>true</code>, as otherwise
<a href="../../freemarker/template/SimpleSequence.html" title="class in freemarker.template"><code>SimpleSequence</code></a> will be used regardless of this. In new projects you should set this to <code>false</code>. At
least before <code>incompatible_improvements</code> 2.4.0 it defaults to <code>true</code>, because of backward
compatibility concerns: with <a href="../../freemarker/template/TemplateSequenceModel.html" title="interface in freemarker.template"><code>TemplateSequenceModel</code></a> templates could access the items by index if they
wanted to (the index values were defined by the iteration order). This was not very useful, or was even
confusing, and it conflicts with the adapter approach.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/template/DefaultObjectWrapper.html#setUseAdaptersForContainers-boolean-"><code>setUseAdaptersForContainers(boolean)</code></a></dd>
</dl>
</li>
</ul>
<a name="getIterableSupport--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIterableSupport</h4>
<pre>public&nbsp;boolean&nbsp;getIterableSupport()</pre>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setIterableSupport-boolean-"><code>setIterableSupport(boolean)</code></a>; see there.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.25</dd>
</dl>
</li>
</ul>
<a name="setIterableSupport-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setIterableSupport</h4>
<pre>public&nbsp;void&nbsp;setIterableSupport(boolean&nbsp;iterableSupport)</pre>
<div class="block">Specifies whether <code>Iterable</code>-s (not to be confused with <code>Iterator</code>-s) that don't implement any other
recognized Java interfaces (most notably <code>Collection</code>) will be recognized as listable objects
(<a href="../../freemarker/template/TemplateCollectionModel.html" title="interface in freemarker.template"><code>TemplateCollectionModel</code></a>-s), or they will be just seen as generic objects (JavaBean-s). Defaults to
<code>false</code> for backward compatibility, but in new projects you should set this to <code>true</code>. Before setting
this to <code>true</code> in older projects, check if you have called <code>myIterable.iterator()</code> directly from any
templates, because the Java API is only exposed to the templates if the <code>Iterable</code> is wrapped as generic
object.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.25</dd>
</dl>
</li>
</ul>
<a name="getDOMNodeSupport--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDOMNodeSupport</h4>
<pre>public final&nbsp;boolean&nbsp;getDOMNodeSupport()</pre>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setDOMNodeSupport-boolean-"><code>setDOMNodeSupport(boolean)</code></a>; see there.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.31</dd>
</dl>
</li>
</ul>
<a name="setDOMNodeSupport-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setDOMNodeSupport</h4>
<pre>public&nbsp;void&nbsp;setDOMNodeSupport(boolean&nbsp;domNodeSupport)</pre>
<div class="block">Enables wrapping <code>Node</code>-s on a special way (as described in the "XML Processing Guide" in the Manual);
defaults to <code>true</code>.. If this is <code>true</code>, <code>Node</code>+s will be wrapped like any other generic object.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.31</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/template/DefaultObjectWrapper.html#handleUnknownType-java.lang.Object-"><code>handleUnknownType(Object)</code></a></dd>
</dl>
</li>
</ul>
<a name="getJythonSupport--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJythonSupport</h4>
<pre>public final&nbsp;boolean&nbsp;getJythonSupport()</pre>
<div class="block">Getter pair of <a href="../../freemarker/template/DefaultObjectWrapper.html#setJythonSupport-boolean-"><code>setJythonSupport(boolean)</code></a>; see there.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.31</dd>
</dl>
</li>
</ul>
<a name="setJythonSupport-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setJythonSupport</h4>
<pre>public&nbsp;void&nbsp;setJythonSupport(boolean&nbsp;jythonSupport)</pre>
<div class="block">Enables wrapping Jython objects in a special way; defaults to <code>true</code>. If this is <code>false</code>, they will
be wrapped like any other generic object. Note that Jython wrapping is legacy feature, and might by disabled by
the selected <a href="../../freemarker/ext/beans/MemberAccessPolicy.html" title="interface in freemarker.ext.beans"><code>MemberAccessPolicy</code></a>, even if this is <code>true</code>; see <a href="../../freemarker/template/DefaultObjectWrapper.html#handleUnknownType-java.lang.Object-"><code>handleUnknownType(Object)</code></a>.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.31</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/template/DefaultObjectWrapper.html#handleUnknownType-java.lang.Object-"><code>handleUnknownType(Object)</code></a></dd>
</dl>
</li>
</ul>
<a name="normalizeIncompatibleImprovementsVersion-freemarker.template.Version-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>normalizeIncompatibleImprovementsVersion</h4>
<pre>protected static&nbsp;<a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a>&nbsp;normalizeIncompatibleImprovementsVersion(<a href="../../freemarker/template/Version.html" title="class in freemarker.template">Version</a>&nbsp;incompatibleImprovements)</pre>
<div class="block">Returns the lowest version number that is equivalent with the parameter version.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</dd>
</dl>
</li>
</ul>
<a name="toPropertiesString--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>toPropertiesString</h4>
<pre>protected&nbsp;java.lang.String&nbsp;toPropertiesString()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../freemarker/ext/beans/BeansWrapper.html#toPropertiesString--">BeansWrapper</a></code></span></div>
<div class="block">Returns the name-value pairs that describe the configuration of this <a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans"><code>BeansWrapper</code></a>; called from
<a href="../../freemarker/ext/beans/BeansWrapper.html#toString--"><code>BeansWrapper.toString()</code></a>. The expected format is like <code>"foo=bar, baaz=wombat"</code>. When overriding this, you should
call the super method, and then insert the content before it with a following <code>", "</code>, or after it with a
preceding <code>", "</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../freemarker/ext/beans/BeansWrapper.html#toPropertiesString--">toPropertiesString</a></code>&nbsp;in class&nbsp;<code><a href="../../freemarker/ext/beans/BeansWrapper.html" title="class in freemarker.ext.beans">BeansWrapper</a></code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.22</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/DefaultObjectWrapper.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/DefaultNonListCollectionAdapter.html" title="class in freemarker.template"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/template/DefaultObjectWrapperBuilder.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/DefaultObjectWrapper.html" target="_top">Frames</a></li>
<li><a href="DefaultObjectWrapper.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><a href="#nested.classes.inherited.from.class.freemarker.ext.beans.BeansWrapper">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.freemarker.ext.beans.BeansWrapper">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>Field&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>