Class Configurable
- Direct Known Subclasses:
Configuration
,Environment
,Template
,TemplateConfiguration
Configuration
,
Template
, and Environment
classes.
It provides settings that are common to each of them. FreeMarker
uses a three-level setting hierarchy - the return value of every setting
getter method on Configurable
objects inherits its value from its parent
Configurable
object, unless explicitly overridden by a call to a
corresponding setter method on the object itself. The parent of an
Environment
object is a Template
object, the
parent of a Template
object is a Configuration
object.-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
The setting name was recognized, but its value couldn't be parsed or the setting couldn't be set for some other reason.static class
The setting name was not recognized. -
Field Summary
Modifier and TypeFieldDescriptionstatic String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Deprecated.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name.static String
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.static String
Modern, camel case (likeThis
) variation of the setting name.static String
Legacy, snake case (like_this
) variation of the setting name. -
Constructor Summary
ModifierConstructorDescriptionDeprecated.This shouldn't even be public; don't use it.Configurable(Configurable parent)
Creates a new instance.protected
Configurable(Version incompatibleImprovements)
Intended to be called from inside FreeMarker only. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addAutoImport(String namespaceVarName, String templateName)
Adds an invisible#import templateName as namespaceVarName
at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).void
addAutoInclude(String templateName)
Adds an invisible#include templateName
at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).protected Object
clone()
protected void
Executes the auto-imports and auto-includes for the main template of this environment.The getter pair ofsetArithmeticEngine(ArithmeticEngine)
.The getter pair ofsetAttemptExceptionReporter(AttemptExceptionReporter)
.boolean
Getter pair ofsetAutoImports(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
.Getter pair ofsetAutoIncludes(List)
; do not modify the returnedList
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
.The getter pair ofsetBooleanFormat(String)
.Getter pair ofsetCFormat(CFormat)
.int
protected String
getCustomAttribute(String name)
Retrieves a named custom attribute for this configurable.String[]
Returns an array with names of all custom attributes defined directly on this configurable.getCustomDateFormat(String name)
Gets the custom name format registered for the name.Map<String,? extends TemplateDateFormatFactory>
Getter pair ofsetCustomDateFormats(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
.Map<String,? extends TemplateDateFormatFactory>
LikegetCustomDateFormats()
, but doesn't fall back to the parentConfigurable
, nor does it provide a non-null
default when called as the method of aConfiguration
.getCustomNumberFormat(String name)
Gets the custom name format registered for the name.Map<String,? extends TemplateNumberFormatFactory>
Getter pair ofsetCustomNumberFormats(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
.Map<String,? extends TemplateNumberFormatFactory>
LikegetCustomNumberFormats()
, but doesn't fall back to the parentConfigurable
.The getter pair ofsetDateFormat(String)
.The getter pair ofsetDateTimeFormat(String)
.protected Environment
The getter pair ofsetLazyAutoImports(Boolean)
.boolean
The getter pair ofsetLazyImports(boolean)
.Getter pair ofsetLocale(Locale)
.boolean
Retrieves theTemplateClassResolver
used to resolve classes when "SomeClassName"?new is called in a template.Getter pair ofsetNumberFormat(String)
.The getter pair ofsetObjectWrapper(ObjectWrapper)
.Getter pair ofsetOutputEncoding(String)
.Returns the parentConfigurable
object of this object.getSetting(String key)
Deprecated.It's not possible in general to convert setting values to string, and thus it's impossible to ensure thatsetSetting(String, String)
will work with the returned value correctly.getSettingNames(boolean camelCase)
Returns the valid setting names that aren'tConfiguration
-only.Deprecated.This method was always defective, and certainly it always will be.boolean
The getter pair ofsetSQLDateAndTimeTimeZone(TimeZone)
.The getter pair ofsetTemplateExceptionHandler(TemplateExceptionHandler)
.The getter pair ofsetTimeFormat(String)
.The getter pair ofsetTimeZone(TimeZone)
.boolean
The getter pair ofsetWrapUncheckedExceptions(boolean)
.boolean
Tells if this configurable object or its parent defines any custom formats.protected TemplateException
invalidSettingValueException(String name, String value)
boolean
boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Returns whether the engine runs in the "Classic Compatibile" mode.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
Tells if this setting is set directly in this object or its value is coming from theparent
.boolean
protected HashMap
parseAsImportList(String text)
protected ArrayList
parseAsList(String text)
protected ArrayList
parseAsSegmentedList(String text)
void
removeAutoImport(String namespaceVarName)
Removes an auto-import from thisConfigurable
level (not from the parents or children); seeaddAutoImport(String, String)
.void
removeAutoInclude(String templateName)
Removes the auto-include from thisConfigurable
level (not from the parents or children); seeaddAutoInclude(String)
.void
removeCustomAttribute(String name)
Removes a named custom attribute for this configurable.void
setAPIBuiltinEnabled(boolean value)
Specifies if?api
can be used in templates.void
setArithmeticEngine(ArithmeticEngine arithmeticEngine)
Sets the arithmetic engine used to perform arithmetic operations.void
setAttemptExceptionReporter(AttemptExceptionReporter attemptExceptionReporter)
Specifies how exceptions handled (and hence suppressed) by an#attempt
blocks will be logged or otherwise reported.void
setAutoFlush(boolean autoFlush)
Sets whether the outputWriter
is automatically flushed at the end ofTemplate.process(Object, Writer)
(and its overloads).void
setAutoImports(Map map)
Removes all auto-imports, then callsaddAutoImport(String, String)
for eachMap
-entry (the entry key is thenamespaceVarName
).void
setAutoIncludes(List templateNames)
Removes all auto-includes, then callsaddAutoInclude(String)
for eachList
items.void
setBooleanFormat(String booleanFormat)
The string value for the booleantrue
andfalse
values, usually intended for human consumption (not for a computer language), separated with comma.void
setCFormat(CFormat cFormat)
Sets the format (usually a computer language) used for?c
,?cn
, and for the"c"
("computer"
before 2.3.32)number_format
, and the"c"
boolean_format
.void
setClassicCompatible(boolean classicCompatibility)
Toggles the "Classic Compatible" mode.void
setClassicCompatibleAsInt(int classicCompatibility)
Same assetClassicCompatible(boolean)
, but allows some extra values.void
setCustomAttribute(String name, Object value)
Sets a named custom attribute for this configurable.void
setCustomDateFormats(Map<String,? extends TemplateDateFormatFactory> customDateFormats)
Associates names with formatter factories, which then can be referred by thedate_format
,time_format
, anddatetime_format
settings with values starting with@name
.void
setCustomNumberFormats(Map<String,? extends TemplateNumberFormatFactory> customNumberFormats)
Associates names with formatter factories, which then can be referred by thenumber_format
setting with values starting with@name
.void
setDateFormat(String dateFormat)
Sets the format used to convertDate
-s that are date-only (no time part) values to string-s, also the format thatsomeString?date
will use to parse strings.void
setDateTimeFormat(String dateTimeFormat)
Sets the format used to convertDate
-s that are date-time (timestamp) values to string-s, also the format thatsomeString?datetime
will use to parse strings.void
setLazyAutoImports(Boolean lazyAutoImports)
Specifies if auto-imports will belazy imports
.void
setLazyImports(boolean lazyImports)
Specifies if<#import ...>
(andEnvironment.importLib(String, String)
) should delay the loading and processing of the imported templates until the content of the imported namespace is actually accessed.void
Sets the locale used for number and date formatting (among others), also the locale used for searching localized template variations when no locale was explicitly requested.void
setLogTemplateExceptions(boolean value)
Specifies ifTemplateException
-s thrown by template processing are logged by FreeMarker or not.void
setNewBuiltinClassResolver(TemplateClassResolver newBuiltinClassResolver)
Sets theTemplateClassResolver
that is used when thenew
built-in is called in a template.void
setNumberFormat(String numberFormat)
Sets the number format used to convert numbers to strings.void
setObjectWrapper(ObjectWrapper objectWrapper)
void
setOutputEncoding(String outputEncoding)
Informs FreeMarker about the charset used for the output.void
setSetting(String name, String value)
Sets a FreeMarker setting by a name and string value.void
setSettings(InputStream propsIn)
Reads a setting list (key and element pairs) from the input stream.void
setSettings(Properties props)
Set the settings stored in aProperties
object.void
setShowErrorTips(boolean showTips)
Sets if tips should be shown in error messages of errors arising during template processing.void
Sets the time zone used when dealing withjava.sql.Date
andjava.sql.Time
values.void
setStrictBeanModels(boolean strict)
Deprecated.Set this on theObjectWrapper
itself.void
setTemplateExceptionHandler(TemplateExceptionHandler templateExceptionHandler)
Sets the exception handler used to handle exceptions occurring inside templates.void
setTimeFormat(String timeFormat)
Sets the format used to convertDate
-s that are time (no date part) values to string-s, also the format thatsomeString?time
will use to parse strings.void
setTimeZone(TimeZone timeZone)
Sets the time zone to use when formatting date/time values.protected TemplateException
settingValueAssignmentException(String name, String value, Throwable cause)
void
setTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm truncateBuiltinAlgorithm)
Specifies the algorithm used for?truncate
,?truncate_w
, and?truncate_c
.void
setURLEscapingCharset(String urlEscapingCharset)
Sets the URL escaping (URL encoding, percentage encoding) charset.void
setWrapUncheckedExceptions(boolean wrapUncheckedExceptions)
Specifies if unchecked exceptions thrown during expression evaluation or during executing custom directives (and transform) will be wrapped intoTemplateException
-s, or will bubble up to the caller ofTemplate.process(Object, Writer, ObjectWrapper)
as is.protected TemplateException
unknownSettingException(String name)
Creates the exception that should be thrown when a setting name isn't recognized.
-
Field Details
-
LOCALE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
LOCALE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
LOCALE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
C_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
C_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
C_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
NUMBER_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
NUMBER_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
NUMBER_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CUSTOM_NUMBER_FORMATS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
TIME_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TIME_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TIME_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
DATE_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
DATE_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
DATE_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CUSTOM_DATE_FORMATS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
DATETIME_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
DATETIME_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
DATETIME_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
TIME_ZONE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TIME_ZONE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TIME_ZONE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
SQL_DATE_AND_TIME_TIME_ZONE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
CLASSIC_COMPATIBLE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CLASSIC_COMPATIBLE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
CLASSIC_COMPATIBLE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
TEMPLATE_EXCEPTION_HANDLER_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
ATTEMPT_EXCEPTION_REPORTER_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.27- See Also:
- Constant Field Values
-
ATTEMPT_EXCEPTION_REPORTER_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.27- See Also:
- Constant Field Values
-
ATTEMPT_EXCEPTION_REPORTER_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
ARITHMETIC_ENGINE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
ARITHMETIC_ENGINE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
ARITHMETIC_ENGINE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
OBJECT_WRAPPER_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
OBJECT_WRAPPER_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
OBJECT_WRAPPER_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
BOOLEAN_FORMAT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
BOOLEAN_FORMAT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
BOOLEAN_FORMAT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
OUTPUT_ENCODING_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
OUTPUT_ENCODING_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
OUTPUT_ENCODING_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
URL_ESCAPING_CHARSET_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
URL_ESCAPING_CHARSET_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
URL_ESCAPING_CHARSET_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
STRICT_BEAN_MODELS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
STRICT_BEAN_MODELS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
STRICT_BEAN_MODELS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.22- See Also:
- Constant Field Values
-
AUTO_FLUSH_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
AUTO_FLUSH_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
AUTO_FLUSH_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.17- See Also:
- Constant Field Values
-
NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
NEW_BUILTIN_CLASS_RESOLVER_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.17- See Also:
- Constant Field Values
-
SHOW_ERROR_TIPS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
SHOW_ERROR_TIPS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
SHOW_ERROR_TIPS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.21- See Also:
- Constant Field Values
-
API_BUILTIN_ENABLED_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
API_BUILTIN_ENABLED_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
API_BUILTIN_ENABLED_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.22- See Also:
- Constant Field Values
-
TRUNCATE_BUILTIN_ALGORITHM_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.29- See Also:
- Constant Field Values
-
TRUNCATE_BUILTIN_ALGORITHM_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.29- See Also:
- Constant Field Values
-
TRUNCATE_BUILTIN_ALGORITHM_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.23- See Also:
- Constant Field Values
-
LOG_TEMPLATE_EXCEPTIONS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.22- See Also:
- Constant Field Values
-
WRAP_UNCHECKED_EXCEPTIONS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.27- See Also:
- Constant Field Values
-
WRAP_UNCHECKED_EXCEPTIONS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.27- See Also:
- Constant Field Values
-
WRAP_UNCHECKED_EXCEPTIONS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints. @since 2.3.27- See Also:
- Constant Field Values
-
LAZY_IMPORTS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
LAZY_IMPORTS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
LAZY_IMPORTS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
LAZY_AUTO_IMPORTS_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
AUTO_IMPORT_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
AUTO_IMPORT_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
AUTO_IMPORT_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
AUTO_INCLUDE_KEY_SNAKE_CASE
Legacy, snake case (like_this
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
AUTO_INCLUDE_KEY_CAMEL_CASE
Modern, camel case (likeThis
) variation of the setting name. @since 2.3.25- See Also:
- Constant Field Values
-
AUTO_INCLUDE_KEY
Alias to the..._SNAKE_CASE
variation due to backward compatibility constraints.- See Also:
- Constant Field Values
-
STRICT_BEAN_MODELS
Deprecated.UseSTRICT_BEAN_MODELS_KEY
instead.- See Also:
- Constant Field Values
-
-
Constructor Details
-
Configurable
Deprecated.This shouldn't even be public; don't use it.Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values. -
Configurable
Intended to be called from inside FreeMarker only. Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values. Called by theConfiguration
constructor. -
Configurable
Creates a new instance. Normally you do not need to use this constructor, as you don't useConfigurable
directly, but its subclasses.
-
-
Method Details
-
clone
- Overrides:
clone
in classObject
- Throws:
CloneNotSupportedException
-
getParent
Returns the parentConfigurable
object of this object. The parent stores the default setting values for thisConfigurable
. For example, the parent of aTemplate
object is aConfiguration
object, so values not specified onTemplate
-level are get from theConfiguration
object.Note on the parent of
Environment
: If you setincompatible_improvements
to at least 2.3.22, it will be always the "main"Template
, that is, the template for whose processing theEnvironment
was created. With lowerincompatible_improvements
, the current parent can temporary change during template execution, for example when your are inside an#include
-d template (among others). Thus, don't build on whichTemplate
the parent ofEnvironment
is during template execution, unless you setincompatible_improvements
to 2.3.22 or higher.- Returns:
- The parent
Configurable
object, ornull
if this is the rootConfigurable
object (i.e, if it's theConfiguration
object).
-
setClassicCompatible
public void setClassicCompatible(boolean classicCompatibility)Toggles the "Classic Compatible" mode. For a comprehensive description of this mode, seeisClassicCompatible()
. -
setClassicCompatibleAsInt
public void setClassicCompatibleAsInt(int classicCompatibility)Same assetClassicCompatible(boolean)
, but allows some extra values.- Parameters:
classicCompatibility
-0
meansfalse
,1
meanstrue
,2
meanstrue
but with emulating bugs in early 2.x classic-compatibility mode. Currently2
affects how booleans are converted to string; with1
it's always"true"
/""
, but with2
it's"true"
/"false"
for values wrapped byBeansWrapper
as thenBoolean.toString()
prevails. Note thatsomeBoolean?string
will always consistently format the boolean according theboolean_format
setting, just like in FreeMarker 2.3 and later.
-
isClassicCompatible
public boolean isClassicCompatible()Returns whether the engine runs in the "Classic Compatibile" mode. When this mode is active, the engine behavior is altered in following way: (these resemble the behavior of the 1.7.x line of FreeMarker engine, now named "FreeMarker Classic", hence the name).- handle undefined expressions gracefully. Namely when an expression
"expr" evaluates to null:
-
in
<assign varname=expr>
directive, or in${expr}
directive, or inotherexpr == expr
, or inotherexpr != expr
, or inhash[expr]
, or inexpr[keyOrIndex]
(since 2.3.20), or inexpr.key
(since 2.3.20), then it's treated as empty string. - as argument of
<list expr as item>
or<foreach item in expr>
, the loop body is not executed (as if it were a 0-length list) - as argument of
<if>
directive, or on other places where a boolean expression is expected, it's treated as false
-
in
- Non-boolean models are accepted in
<if>
directive, or as operands of logical operators. "Empty" models (zero-length string, empty sequence or hash) are evaluated as false, all others are evaluated as true. - When boolean value is treated as a string (i.e. output in
${...}
directive, or concatenated with other string), true values are converted to string "true", false values are converted to empty string. Except, if the value of the setting is2
, it will be formatted according theboolean_format
setting, just like in 2.3.20 and later. - Scalar models supplied to
<list>
and<foreach>
are treated as a one-element list consisting of the passed model. - Paths parameter of
<include>
will be interpreted as absolute path.
- handle undefined expressions gracefully. Namely when an expression
"expr" evaluates to null:
-
getClassicCompatibleAsInt
public int getClassicCompatibleAsInt() -
isClassicCompatibleSet
public boolean isClassicCompatibleSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setLocale
Sets the locale used for number and date formatting (among others), also the locale used for searching localized template variations when no locale was explicitly requested. On theConfiguration
level it defaults to the default locale of system (of the JVM), for server-side application usually you should set it explicitly in theConfiguration
to use the preferred locale of your application instead. -
getLocale
Getter pair ofsetLocale(Locale)
. Notnull
. -
isCFormatSet
public boolean isCFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.32
-
setCFormat
Sets the format (usually a computer language) used for?c
,?cn
, and for the"c"
("computer"
before 2.3.32)number_format
, and the"c"
boolean_format
.The default value depends on
incompatible_improvements
. If that's 2.3.32 or higher, then it's"JavaScript or JSON"
, otherwise it's"legacy"
.- Since:
- 2.3.32
-
getCFormat
Getter pair ofsetCFormat(CFormat)
. Notnull
.- Since:
- 2.3.32
-
isLocaleSet
public boolean isLocaleSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setTimeZone
Sets the time zone to use when formatting date/time values. Defaults to the system time zone (TimeZone.getDefault()
), regardless of the "locale" FreeMarker setting, so in a server application you probably want to set it explicitly in theEnvironment
to match the preferred time zone of target audience (like the Web page visitor).If you or the templates set the time zone, you should probably also set
setSQLDateAndTimeTimeZone(TimeZone)
!- See Also:
setSQLDateAndTimeTimeZone(TimeZone)
-
getTimeZone
The getter pair ofsetTimeZone(TimeZone)
. -
isTimeZoneSet
public boolean isTimeZoneSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setSQLDateAndTimeTimeZone
Sets the time zone used when dealing withjava.sql.Date
andjava.sql.Time
values. It defaults tonull
for backward compatibility, but in most applications this should be set to the JVM default time zone (server default time zone), because that's what most JDBC drivers will use when constructing thejava.sql.Date
andjava.sql.Time
values. If this setting isnull
, FreeMarker will use the value of (getTimeZone()
) forjava.sql.Date
andjava.sql.Time
values, which often gives bad results.This setting doesn't influence the formatting of other kind of values (like of
java.sql.Timestamp
or plainjava.util.Date
values).To decide what value you need, a few things has to be understood:
- Date-only and time-only values in SQL-oriented databases usually store calendar and clock field values directly (year, month, day, or hour, minute, seconds (with decimals)), as opposed to a set of points on the physical time line. Thus, unlike SQL timestamps, these values usually aren't meant to be shown differently depending on the time zone of the audience.
- When a JDBC query has to return a date-only or time-only value, it has to convert it to a point on the
physical time line, because that's what
Date
and its subclasses store (milliseconds since the epoch). Obviously, this is impossible to do. So JDBC just chooses a physical time which, when rendered with the JVM default time zone, will give the same field values as those stored in the database. (Actually, you can give JDBC a calendar, and so it can use other time zones too, but most application won't care using those overloads.) For example, assume that the system time zone is GMT+02:00. Then, 2014-07-12 in the database will be translated to physical time 2014-07-11 22:00:00 UTC, because that rendered in GMT+02:00 gives 2014-07-12 00:00:00. Similarly, 11:57:00 in the database will be translated to physical time 1970-01-01 09:57:00 UTC. Thus, the physical time stored in the returned value depends on the default system time zone of the JDBC client, not just on the content of the database. (This used to be the default behavior of ORM-s, like Hibernate, too.) - The value of the
time_zone
FreeMarker configuration setting sets the time zone used for the template output. For example, when a web page visitor has a preferred time zone, the web application framework may callsEnvironment.setTimeZone(TimeZone)
with that time zone. Thus, the visitor will seejava.sql.Timestamp
and plainjava.util.Date
values as they look in his own time zone. While this is desirable for those types, as they meant to represent physical points on the time line, this is not necessarily desirable for date-only and time-only values. Whensql_date_and_time_time_zone
isnull
,time_zone
is used for rendering all kind of date/time/dateTime values, includingjava.sql.Date
andjava.sql.Time
, and then if, for example,time_zone
is GMT+00:00, the values from the earlier examples will be shown as 2014-07-11 (one day off) and 09:57:00 (2 hours off). While those are the time zone correct renderings, those values are probably meant to be shown "as is". - You may wonder why this setting isn't simply "SQL time zone", that is, why's this time zone not applied to
java.sql.Timestamp
values as well. Timestamps in databases refer to a point on the physical time line, and thus doesn't have the inherent problem of date-only and time-only values. FreeMarker assumes that the JDBC driver converts time stamps coming from the database so that they store the distance from the epoch (1970-01-01 00:00:00 UTC), as requested by theDate
API. Then time stamps can be safely rendered in different time zones, and thus need no special treatment.
- Parameters:
tz
- Maybenull
, in which casejava.sql.Date
andjava.sql.Time
values will be formatted in the time zone returned bygetTimeZone()
. (Note that sincenull
is an allowed value for this setting, it will not causegetSQLDateAndTimeTimeZone()
to fall back to the parent configuration.)- Since:
- 2.3.21
- See Also:
setTimeZone(TimeZone)
-
getSQLDateAndTimeTimeZone
The getter pair ofsetSQLDateAndTimeTimeZone(TimeZone)
.- Returns:
null
if the value ofgetTimeZone()
should be used for formattingjava.sql.Date
andjava.sql.Time
values, otherwise the time zone that should be used to format the values of those two types.- Since:
- 2.3.21
-
isSQLDateAndTimeTimeZoneSet
public boolean isSQLDateAndTimeTimeZoneSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setNumberFormat
Sets the number format used to convert numbers to strings. Currently, this is one of these:"number"
: The number format returned byNumberFormat.getNumberInstance(Locale)
. This is the default."c"
(recognized since 2.3.32): The number format used by FTL'sc
built-in (like insomeNumber?c
). So with this${someNumber}
will output the same as${someNumber?c}
. This should only be used if the template solely generates source code, configuration file, or other content that's not read by normal users. If the template contains parts that's read by normal users (like typical a web page), you are not supposed to use this."computer"
: The old (deprecated) name for"c"
. Recognized by all FreeMarker versions."currency"
: The number format returned byNumberFormat.getCurrencyInstance(Locale)
"percent"
: The number format returned byNumberFormat.getPercentInstance(Locale)
DecimalFormat
pattern (like"0.##"
). This syntax is extended by FreeMarker so that you can specify options like the rounding mode and the symbols used after a 2nd semicolon. For example,",000;; roundingMode=halfUp groupingSeparator=_"
will format numbers like",000"
would, but with half-up rounding mode, and_
as the group separator. See more about "extended Java decimal format" in the FreeMarker Manual.- If the string starts with
@
character followed by a letter then it's interpreted as a custom number format, but only if eitherConfiguration.getIncompatibleImprovements()
is at least 2.3.24, or there's any custom formats defined (even if custom date/time/dateTime format). The format of a such string is"@name"
or"@name parameters"
, wherename
is the key in theMap
set bysetCustomNumberFormats(Map)
, andparameters
is parsed by the customTemplateNumberFormat
.
Defaults to
"number"
. -
getNumberFormat
Getter pair ofsetNumberFormat(String)
. -
isNumberFormatSet
public boolean isNumberFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
getCustomNumberFormats
Getter pair ofsetCustomNumberFormats(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
. So beware, the returned value doesn't reflect theMap
key granularity fallback logic that FreeMarker actually uses for this setting (for that, usegetCustomNumberFormat(String)
). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on thisConfigurable
level (but usually it's well defined if until what point settings are possibly modified).The return value is never
null
; called on theConfiguration
(top) level, it defaults to an emptyMap
.- Since:
- 2.3.24
- See Also:
getCustomNumberFormatsWithoutFallback()
-
getCustomNumberFormatsWithoutFallback
LikegetCustomNumberFormats()
, but doesn't fall back to the parentConfigurable
.- Since:
- 2.3.25
-
setCustomNumberFormats
public void setCustomNumberFormats(Map<String,? extends TemplateNumberFormatFactory> customNumberFormats)Associates names with formatter factories, which then can be referred by thenumber_format
setting with values starting with@name
. Beware, if you specify any custom formats here, an initial@
followed by a letter will have special meaning in number/date/time/datetime format strings, even ifincompatible_improvements
is less than 2.3.24 (starting withincompatible_improvements
2.3.24@
always has special meaning).- Parameters:
customNumberFormats
- Can't benull
. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits (not_
).- Since:
- 2.3.24
-
isCustomNumberFormatsSet
public boolean isCustomNumberFormatsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
getCustomNumberFormat
Gets the custom name format registered for the name.- Since:
- 2.3.24
-
hasCustomFormats
public boolean hasCustomFormats()Tells if this configurable object or its parent defines any custom formats.- Since:
- 2.3.24
-
setBooleanFormat
The string value for the booleantrue
andfalse
values, usually intended for human consumption (not for a computer language), separated with comma. For example,"yes,no"
. Note that white-space is significant, so"yes, no"
is WRONG (unless you want that leading space before "no"). Because the proper way of formatting booleans depends on the context too much, it's probably the best to leave this setting on its default, which will enforce explicit formatting, like${aBoolean?string('on', 'off')}
.For backward compatibility the default is
"true,false"
, but using that value is denied for automatic boolean-to-string conversion, like${myBoolean}
will fail with it. If you generate the piece of output for "computer audience" as opposed to "human audience", then you should write${myBoolean?c}
, which will printtrue
orfalse
. If you really want to always format for computer audience, then it's might be reasonable to set this setting toc
.Note that automatic boolean-to-string conversion only exists since FreeMarker 2.3.20. Earlier this setting only influenced the result of
myBool?string
. -
getBooleanFormat
The getter pair ofsetBooleanFormat(String)
. -
isBooleanFormatSet
public boolean isBooleanFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setTimeFormat
Sets the format used to convertDate
-s that are time (no date part) values to string-s, also the format thatsomeString?time
will use to parse strings.For the possible values see
setDateTimeFormat(String)
.Defaults to
""
, which is equivalent to"medium"
. -
getTimeFormat
The getter pair ofsetTimeFormat(String)
. -
isTimeFormatSet
public boolean isTimeFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setDateFormat
Sets the format used to convertDate
-s that are date-only (no time part) values to string-s, also the format thatsomeString?date
will use to parse strings.For the possible values see
setDateTimeFormat(String)
.Defaults to
""
which is equivalent to"medium"
. -
getDateFormat
The getter pair ofsetDateFormat(String)
. -
isDateFormatSet
public boolean isDateFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setDateTimeFormat
Sets the format used to convertDate
-s that are date-time (timestamp) values to string-s, also the format thatsomeString?datetime
will use to parse strings.The possible setting values are (the quotation marks aren't part of the value itself):
Patterns accepted by Java's
SimpleDateFormat
, for example"dd.MM.yyyy HH:mm:ss"
(whereHH
means 24 hours format) or"MM/dd/yyyy hh:mm:ss a"
(wherea
prints AM or PM, if the current language is English)."xs"
for XML Schema format, or"iso"
for ISO 8601:2004 format. These formats allow various additional options, separated with space, like in"iso m nz"
(or with_
, like in"iso_m_nz"
; this is useful in a case likelastModified?string.iso_m_nz
). The options and their meanings are:Accuracy options:
ms
= Milliseconds, always shown with all 3 digits, even if it's all 0-s. Example:13:45:05.800
s
= Seconds (fraction seconds are dropped even if non-0), like13:45:05
m
= Minutes, like13:45
. This isn't allowed for "xs".
h
= Hours, like13
. This isn't allowed for "xs".
Neither = Up to millisecond accuracy, but trailing millisecond 0-s are removed, also the whole milliseconds part if it would be 0 otherwise. Example:13:45:05.8
Time zone offset visibility options:
fz
= "Force Zone", always show time zone offset (even for forjava.sql.Date
andjava.sql.Time
values). But, because ISO 8601 doesn't allow for dates (means date without time of the day) to show the zone offset, this option will have no effect in the case of"iso"
with dates.
nz
= "No Zone", never show time zone offset
Neither = always show time zone offset, except forjava.sql.Date
andjava.sql.Time
, and for"iso"
date values.Time zone options:
u
= Use UTC instead of what thetime_zone
setting suggests. However,java.sql.Date
andjava.sql.Time
aren't affected by this (seesetSQLDateAndTimeTimeZone(TimeZone)
to understand why)
fu
= "Force UTC", that is, use UTC instead of what thetime_zone
or thesql_date_and_time_time_zone
setting suggests. This also effectsjava.sql.Date
andjava.sql.Time
values
Neither = Use the time zone suggested by thetime_zone
or thesql_date_and_time_time_zone
configuration setting (setTimeZone(TimeZone)
andsetSQLDateAndTimeTimeZone(TimeZone)
).
The options can be specified in any order.
Options from the same category are mutually exclusive, like using
m
ands
together is an error.The accuracy and time zone offset visibility options don't influence parsing, only formatting. For example, even if you use "iso m nz", "2012-01-01T15:30:05.125+01" will be parsed successfully and with milliseconds accuracy. The time zone options (like "u") influence what time zone is chosen only when parsing a string that doesn't contain time zone offset.
Parsing with
"iso"
understands both extend format and basic format, like20141225T235018
. It doesn't, however, support the parsing of all kind of ISO 8601 strings: if there's a date part, it must use year, month and day of the month values (not week of the year), and the day can't be omitted.The output of
"iso"
is deliberately so that it's also a good representation of the value with XML Schema format, except for 0 and negative years, where it's impossible. Also note that the time zone offset is omitted for date values in the"iso"
format, while it's preserved for the"xs"
format."short"
,"medium"
,"long"
, or"full"
, which that has locale-dependent meaning defined by the Java platform (see in the documentation ofDateFormat
). For date-time values, you can specify the length of the date and time part independently, be separating them with_
, like"short_medium"
. ("medium"
means"medium_medium"
for date-time values.)Anything that starts with
"@"
followed by a letter is interpreted as a custom date/time/dateTime format, but only if eitherConfiguration.getIncompatibleImprovements()
is at least 2.3.24, or there's any custom formats defined (even if custom number format). The format of such string is"@name"
or"@name parameters"
, wherename
is the key in theMap
set bysetCustomDateFormats(Map)
, andparameters
is parsed by the custom number format.
Defaults to
""
, which is equivalent to"medium_medium"
. -
getDateTimeFormat
The getter pair ofsetDateTimeFormat(String)
. -
isDateTimeFormatSet
public boolean isDateTimeFormatSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
getCustomDateFormats
Getter pair ofsetCustomDateFormats(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
. So beware, the returned value doesn't reflect theMap
key granularity fallback logic that FreeMarker actually uses for this setting (for that, usegetCustomDateFormat(String)
). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on thisConfigurable
level (but usually it's well defined if until what point settings are possibly modified).The return value is never
null
; called on theConfiguration
(top) level, it defaults to an emptyMap
.- Since:
- 2.3.24
- See Also:
getCustomDateFormatsWithoutFallback()
-
getCustomDateFormatsWithoutFallback
LikegetCustomDateFormats()
, but doesn't fall back to the parentConfigurable
, nor does it provide a non-null
default when called as the method of aConfiguration
.- Since:
- 2.3.25
-
setCustomDateFormats
public void setCustomDateFormats(Map<String,? extends TemplateDateFormatFactory> customDateFormats)Associates names with formatter factories, which then can be referred by thedate_format
,time_format
, anddatetime_format
settings with values starting with@name
. Beware, if you specify any custom formats here, an initial@
followed by a letter will have special meaning in number/date/time/datetime format strings, even ifincompatible_improvements
is less than 2.3.24 (starting withincompatible_improvements
2.3.24@
always has special meaning).- Parameters:
customDateFormats
- Can't benull
. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits.- Since:
- 2.3.24
-
isCustomDateFormatsSet
public boolean isCustomDateFormatsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
getCustomDateFormat
Gets the custom name format registered for the name.- Since:
- 2.3.24
-
setTemplateExceptionHandler
Sets the exception handler used to handle exceptions occurring inside templates. The default isTemplateExceptionHandler.DEBUG_HANDLER
. The recommended values are:- In production systems:
TemplateExceptionHandler.RETHROW_HANDLER
- During development of HTML templates:
TemplateExceptionHandler.HTML_DEBUG_HANDLER
- During development of non-HTML templates:
TemplateExceptionHandler.DEBUG_HANDLER
All of these will let the exception propagate further, so that you can catch it around
Template.process(Object, Writer)
for example. The difference is in what they print on the output before they do that.Note that the
TemplateExceptionHandler
is not meant to be used for generating HTTP error pages. Neither is it meant to be used to roll back the printed output. These should be solved outside template processing when the exception raises fromTemplate.process
.TemplateExceptionHandler
meant to be used if you want to include special content in the template output, or if you want to suppress certain exceptions. If you suppress an exception, and thegetLogTemplateExceptions()
returnsfalse
, then it's the responsibility of theTemplateExceptionHandler
to log the exception (if you want it to be logged). - In production systems:
-
getTemplateExceptionHandler
The getter pair ofsetTemplateExceptionHandler(TemplateExceptionHandler)
. -
isTemplateExceptionHandlerSet
public boolean isTemplateExceptionHandlerSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setAttemptExceptionReporter
Specifies how exceptions handled (and hence suppressed) by an#attempt
blocks will be logged or otherwise reported. The default value isAttemptExceptionReporter.LOG_ERROR_REPORTER
.Note that
#attempt
is not supposed to be a general purpose error handler mechanism, liketry
is in Java. It's for decreasing the impact of unexpected errors, by making it possible that only part of the page is going down, instead of the whole page. But it's still an error, something that someone should fix. So the error should be reported, not just ignored in a customAttemptExceptionReporter
-s.The
AttemptExceptionReporter
is invoked regardless of the value of thelog_template_exceptions
setting. TheAttemptExceptionReporter
is not invoked if theTemplateExceptionHandler
has suppressed the exception.- Since:
- 2.3.27
-
getAttemptExceptionReporter
The getter pair ofsetAttemptExceptionReporter(AttemptExceptionReporter)
.- Since:
- 2.3.27
-
isAttemptExceptionReporterSet
public boolean isAttemptExceptionReporterSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.27
-
setArithmeticEngine
Sets the arithmetic engine used to perform arithmetic operations. The default isArithmeticEngine.BIGDECIMAL_ENGINE
. -
getArithmeticEngine
The getter pair ofsetArithmeticEngine(ArithmeticEngine)
. -
isArithmeticEngineSet
public boolean isArithmeticEngineSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setObjectWrapper
Sets theObjectWrapper
used to wrap objects toTemplateModel
-s when using thisConfigurable
.On
Configuration
level, the default is aDefaultObjectWrapper
instance with the sameincompatible_improvements
setting value as of theConfiguration
. (Also, with very low incompatible improvements it'sObjectWrapper.DEFAULT_WRAPPER
.). Untill you called this method, the default value will be automatically replaced whenConfiguration.setIncompatibleImprovements(Version)
is called, to follow the value of theincompatible_improvements
setting.Below
Configuration
level it's usually unset, so we fall back to what's coming fromConfiguration
.- Parameters:
objectWrapper
- Not null.
-
getObjectWrapper
The getter pair ofsetObjectWrapper(ObjectWrapper)
. -
isObjectWrapperSet
public boolean isObjectWrapperSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setOutputEncoding
Informs FreeMarker about the charset used for the output. As FreeMarker outputs character stream (not byte stream), it's not aware of the output charset unless the software that encloses it tells it with this setting. Some templates may use FreeMarker features that require this information. Setting this tonull
means that the output encoding is not known.Defaults to
null
(unknown). -
getOutputEncoding
Getter pair ofsetOutputEncoding(String)
. -
isOutputEncodingSet
public boolean isOutputEncodingSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setURLEscapingCharset
Sets the URL escaping (URL encoding, percentage encoding) charset. Ifnull
, the output encoding (setOutputEncoding(String)
) will be used for URL escaping. Defaults tonull
. -
getURLEscapingCharset
-
isURLEscapingCharsetSet
public boolean isURLEscapingCharsetSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setNewBuiltinClassResolver
Sets theTemplateClassResolver
that is used when thenew
built-in is called in a template. That is, when a template contains the"com.example.SomeClassName"?new
expression, this object will be called to resolve the"com.example.SomeClassName"
string to a class. The default value isTemplateClassResolver.UNRESTRICTED_RESOLVER
in FreeMarker 2.3.x, andTemplateClassResolver.SAFER_RESOLVER
starting from FreeMarker 2.4.0. If you allow users to upload templates, it's important to use a custom restrictiveTemplateClassResolver
.Note that the
MemberAccessPolicy
used by theObjectWrapper
also influences what constructors are available. Allowing the resolution of the class here is not enough in itself, as theMemberAccessPolicy
has to allow exposing the particular constructor you try to call as well.- Since:
- 2.3.17
-
getNewBuiltinClassResolver
Retrieves theTemplateClassResolver
used to resolve classes when "SomeClassName"?new is called in a template.- Since:
- 2.3.17
-
isNewBuiltinClassResolverSet
public boolean isNewBuiltinClassResolverSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setAutoFlush
public void setAutoFlush(boolean autoFlush)Sets whether the outputWriter
is automatically flushed at the end ofTemplate.process(Object, Writer)
(and its overloads). The default istrue
.Using
false
is needed for example when a Web page is composed from several boxes (like portlets, GUI panels, etc.) that aren't inserted with#include
(or with similar directives) into a master FreeMarker template, rather they are all processed with a separateTemplate.process(Object, Writer)
call. In a such scenario the automatic flushes would commit the HTTP response after each box, hence interfering with full-page buffering, and also possibly decreasing performance with too frequent and too early response buffer flushes.- Since:
- 2.3.17
-
getAutoFlush
public boolean getAutoFlush()- Since:
- 2.3.17
-
isAutoFlushSet
public boolean isAutoFlushSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setShowErrorTips
public void setShowErrorTips(boolean showTips)Sets if tips should be shown in error messages of errors arising during template processing. The default istrue
.- Since:
- 2.3.21
-
getShowErrorTips
public boolean getShowErrorTips()- Since:
- 2.3.21
-
isShowErrorTipsSet
public boolean isShowErrorTipsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setAPIBuiltinEnabled
public void setAPIBuiltinEnabled(boolean value)Specifies if?api
can be used in templates. Defaults tofalse
so that updating FreeMarker won't decrease the security of existing applications.- Since:
- 2.3.22
-
isAPIBuiltinEnabled
public boolean isAPIBuiltinEnabled()- Since:
- 2.3.22
-
isAPIBuiltinEnabledSet
public boolean isAPIBuiltinEnabledSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setTruncateBuiltinAlgorithm
Specifies the algorithm used for?truncate
,?truncate_w
, and?truncate_c
. Defaults toDefaultTruncateBuiltinAlgorithm.ASCII_INSTANCE
. Most customization needs can be addressed by creating a newDefaultTruncateBuiltinAlgorithm
with the proper constructor parameters. Otherwise, users may use their ownTruncateBuiltinAlgorithm
implementation.In case you need to set this with
Properties
, or a similar configuration approach that doesn't let you create the value in Java, see examples atsetSetting(String, String)
.- Since:
- 2.3.29
-
getTruncateBuiltinAlgorithm
- Since:
- 2.3.29
-
isTruncateBuiltinAlgorithmSet
public boolean isTruncateBuiltinAlgorithmSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.29
-
setLogTemplateExceptions
public void setLogTemplateExceptions(boolean value)Specifies ifTemplateException
-s thrown by template processing are logged by FreeMarker or not. The default istrue
for backward compatibility, but that results in logging the exception twice in properly written applications, because there theTemplateException
thrown by the public FreeMarker API is also logged by the caller (even if only as the cause exception of a higher level exception). Hence, in modern applications it should be set tofalse
. Note that this setting has no effect on the logging of exceptions caught by#attempt
; by default those are always logged as errors (because those exceptions won't bubble up to the API caller), however, that can be changed with theattempt_exception_reporter
setting.- Since:
- 2.3.22
-
getLogTemplateExceptions
public boolean getLogTemplateExceptions()- Since:
- 2.3.22
-
isLogTemplateExceptionsSet
public boolean isLogTemplateExceptionsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.24
-
setWrapUncheckedExceptions
public void setWrapUncheckedExceptions(boolean wrapUncheckedExceptions)Specifies if unchecked exceptions thrown during expression evaluation or during executing custom directives (and transform) will be wrapped intoTemplateException
-s, or will bubble up to the caller ofTemplate.process(Object, Writer, ObjectWrapper)
as is. The default isfalse
for backward compatibility (as some applications catch certain unchecked exceptions thrown by the template processing to do something special), but the recommended value istrue
. When this istrue
, the unchecked exceptions will be wrapped into aTemplateException
-s, thus the exception will include the location in the template (not just the Java stack trace). Another consequence of the wrapping is that theTemplateExceptionHandler
will be invoked for the exception (as that only handlesTemplateException
-s, it wasn't invoked for unchecked exceptions). When this setting isfalse
, unchecked exception will be thrown byTemplate.process(Object, Writer, ObjectWrapper)
. Note that plain Java methods called from templates aren't user definedTemplateMethodModel
-s, and have always wrapped the thrown exception intoTemplateException
, regardless of this setting.- Since:
- 2.3.27
-
getWrapUncheckedExceptions
public boolean getWrapUncheckedExceptions()The getter pair ofsetWrapUncheckedExceptions(boolean)
.- Since:
- 2.3.27
-
isWrapUncheckedExceptionsSet
public boolean isWrapUncheckedExceptionsSet()- Since:
- 2.3.27
-
getLazyImports
public boolean getLazyImports()The getter pair ofsetLazyImports(boolean)
.- Since:
- 2.3.25
-
setLazyImports
public void setLazyImports(boolean lazyImports)Specifies if<#import ...>
(andEnvironment.importLib(String, String)
) should delay the loading and processing of the imported templates until the content of the imported namespace is actually accessed. This makes the overhead of unused imports negligible. Note that turning on lazy importing isn't entirely transparent, as accessing global variables (usually created with<#global ...=...>
) that should be created by the imported template won't trigger the loading and processing of the lazily imported template (because globals aren't accessed through the namespace variable), so the global variable will just be missing. In general, you lose the strict control over when the namespace initializing code in the imported template will be executed, though it shouldn't mater for most well designed imported templates. Another drawback is that importing a missing or otherwise broken template will be successful, and the problem will remain hidden until (and if) the namespace content is actually used. Note that the namespace initializing code will run with the same locale as it was at the point of the<#import ...>
call (other settings won't be handled specially like that).The default is
false
(and thus imports are eager) for backward compatibility, which can cause perceivable overhead if you have many imports and only a few of them is actually used.This setting also affects auto-imports, unless you have set a non-
null
value withsetLazyAutoImports(Boolean)
.- Since:
- 2.3.25
- See Also:
setLazyAutoImports(Boolean)
-
isLazyImportsSet
public boolean isLazyImportsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.25
-
getLazyAutoImports
The getter pair ofsetLazyAutoImports(Boolean)
.- Since:
- 2.3.25
-
setLazyAutoImports
Specifies if auto-imports will belazy imports
. This is useful to make the overhead of unused auto-imports negligible. If this is set tonull
,getLazyImports()
specifies the behavior of auto-imports too. The default value isnull
.- Since:
- 2.3.25
-
isLazyAutoImportsSet
public boolean isLazyAutoImportsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.25
-
addAutoImport
Adds an invisible#import templateName as namespaceVarName
at the beginning of the main template (that's the top-level template that wasn't included/imported from another template). While it only affects the main template directly, as the imports will create a global variable there, the imports will be visible from the further imported templates too (note thatConfiguration.getIncompatibleImprovements()
set to 2.3.24 fixes a rarely surfacing bug with that).It's recommended to set the
lazy_auto_imports
setting (setLazyAutoImports(Boolean)
) totrue
when using this, so that auto-imports that are unused in a template won't degrade performance by unnecessary loading and initializing the imported library.If the imports aren't lazy, the order of the imports will be the same as the order in which they were added with this method. (Calling this method with an already added
namespaceVarName
will move that to the end of the auto-import order.)The auto-import is added directly to the
Configurable
on which this method is called (not to the parents or children), but when the main template is processed, the auto-imports are collected from all theConfigurable
levels, in parent-to-child order:Configuration
,Template
(the main template),Environment
. If the samenamespaceVarName
occurs on multiple levels, the one on the child level is used, and the clashing import from the parent level is skipped.If there are also auto-includes (see
addAutoInclude(String)
), those will be executed after the auto-imports.- See Also:
setAutoImports(Map)
-
removeAutoImport
Removes an auto-import from thisConfigurable
level (not from the parents or children); seeaddAutoImport(String, String)
. Does nothing if the auto-import doesn't exist. -
setAutoImports
Removes all auto-imports, then callsaddAutoImport(String, String)
for eachMap
-entry (the entry key is thenamespaceVarName
). The order of the auto-imports will be the same asMap.keySet()
returns the keys (but the order of imports doesn't mater for properly designed libraries anyway).- Parameters:
map
- Maps the namespace variable names to the template names; notnull
-
getAutoImports
Getter pair ofsetAutoImports(Map)
; do not modify the returnedMap
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
. So beware, the returned value doesn't reflect theMap
key granularity fallback logic that FreeMarker actually uses for this setting. The returned value is not the sameMap
object that was set withsetAutoImports(Map)
, only its content is the same. The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on thisConfigurable
level (but usually it's well defined if until what point settings are possibly modified).The return value is never
null
; called on theConfiguration
(top) level, it defaults to an emptyMap
.- Since:
- 2.3.25
- See Also:
getAutoImportsWithoutFallback()
-
isAutoImportsSet
public boolean isAutoImportsSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.25
-
getAutoImportsWithoutFallback
- Since:
- 2.3.25
-
addAutoInclude
Adds an invisible#include templateName
at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).The order of the inclusions will be the same as the order in which they were added with this method.
The auto-include is added directly to the
Configurable
on which this method is called (not to the parents or children), but when the main template is processed, the auto-includes are collected from all theConfigurable
levels, in parent-to-child order:Configuration
,Template
(the main template),Environment
.If there are also auto-imports (
addAutoImport(String, String)
), those imports will be executed before the auto-includes, hence the namespace variables are accessible for the auto-included templates.Calling
addAutoInclude(String)
with an already added template name will just move that to the end of the auto-include list (within the sameConfigurable
level). This works even if the same template name appears on differentConfigurable
levels, in which case only the inclusion on the lowest (child) level will be executed.- See Also:
setAutoIncludes(List)
-
setAutoIncludes
Removes all auto-includes, then callsaddAutoInclude(String)
for eachList
items.Before incompatible improvements 2.3.25 it doesn't filter out duplicates from the list if this method was called on a
Configuration
instance. -
getAutoIncludes
Getter pair ofsetAutoIncludes(List)
; do not modify the returnedList
! To be consistent with other setting getters, if this setting was set directly on thisConfigurable
object, this simply returns that value, otherwise it returns the value from the parentConfigurable
. So beware, the returned value doesn't reflect theList
concatenation logic that FreeMarker actually uses for this setting. The returned value is not the sameList
object that was set withsetAutoIncludes(List)
, only its content is the same (except that duplicate are removed). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on thisConfigurable
level (but usually it's well defined if until what point settings are possibly modified).The return value is never
null
; called on theConfiguration
(top) level, it defaults to an emptyList
.- Since:
- 2.3.25
- See Also:
getAutoIncludesWithoutFallback()
-
isAutoIncludesSet
public boolean isAutoIncludesSet()Tells if this setting is set directly in this object or its value is coming from theparent
.- Since:
- 2.3.25
-
getAutoIncludesWithoutFallback
- Since:
- 2.3.25
-
removeAutoInclude
Removes the auto-include from thisConfigurable
level (not from the parents or children); seeaddAutoInclude(String)
. Does nothing if the template is not there. -
setSetting
Sets a FreeMarker setting by a name and string value. If you can configure FreeMarker directly with Java (or other programming language), you should use the dedicated setter methods instead (likesetObjectWrapper(ObjectWrapper)
. This meant to be used only when you get settings from somewhere asString
-String
name-value pairs (typically, as aProperties
object). Below you find an overview of the settings available.Note: As of FreeMarker 2.3.23, setting names can be written in camel case too. For example, instead of
date_format
you can also usedateFormat
. It's likely that camel case will become to the recommended convention in the future.The list of settings commonly supported in all
Configurable
subclasses:"locale"
: SeesetLocale(Locale)
.
String value: local codes with the usual format in Java, such as"en_US"
, or since 2.3.26, "JVM default" (ignoring case) to use the default locale of the Java environment."classic_compatible"
: SeesetClassicCompatible(boolean)
andsetClassicCompatibleAsInt(int)
.
String value:"true"
,"false"
, also since 2.3.200
or1
or2
. (Also accepts"yes"
,"no"
,"t"
,"f"
,"y"
,"n"
.) Case insensitive."custom_number_formats"
: SeesetCustomNumberFormats(Map)
.
String value: Interpreted as an object builder expression.
Example:{ "hex": com.example.HexTemplateNumberFormatFactory, "gps": com.example.GPSTemplateNumberFormatFactory }
"custom_date_formats"
: SeesetCustomDateFormats(Map)
.
String value: Interpreted as an object builder expression.
Example:{ "trade": com.example.TradeTemplateDateFormatFactory, "log": com.example.LogTemplateDateFormatFactory }
"c_format"
: SeeConfiguration.setCFormat(CFormat)
.
String value:"default"
(case insensitive) for the default (onConfiguration
only), or one of the predefined values"JavaScript or JSON"
,"JSON"
,"JavaScript"
,"Java"
,"XS"
,"legacy"
, or an object builder expression that gives aCFormat
object."template_exception_handler"
: SeesetTemplateExceptionHandler(TemplateExceptionHandler)
.
String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then it must be one of these predefined values (case insensitive):"rethrow"
(meansTemplateExceptionHandler.RETHROW_HANDLER
),"debug"
(meansTemplateExceptionHandler.DEBUG_HANDLER
),"html_debug"
(meansTemplateExceptionHandler.HTML_DEBUG_HANDLER
),"ignore"
(meansTemplateExceptionHandler.IGNORE_HANDLER
), or"default"
(only allowed forConfiguration
instances) for the default value."attempt_exception_reporter"
: SeesetAttemptExceptionReporter(AttemptExceptionReporter)
.
String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then it must be one of these predefined values (case insensitive):"log_error"
(meansAttemptExceptionReporter.LOG_ERROR_REPORTER
),"log_warn"
(meansAttemptExceptionReporter.LOG_WARN_REPORTER
), or"default"
(only allowed forConfiguration
instances) for the default value."arithmetic_engine"
: SeesetArithmeticEngine(ArithmeticEngine)
.
String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then it must be one of these special values (case insensitive):"bigdecimal"
,"conservative"
."object_wrapper"
: SeesetObjectWrapper(ObjectWrapper)
.
String value: If the value contains dot, then it's interpreted as an object builder expression, with the addition thatBeansWrapper
,DefaultObjectWrapper
andSimpleObjectWrapper
can be referred without package name. For example, these strings are valid values:"DefaultObjectWrapper(2.3.21, forceLegacyNonListCollections=false, iterableSupport=true)"
,"BeansWrapper(2.3.21, simpleMapWrapper=true)"
.
If the value does not contain dot, then it must be one of these special values (case insensitive):"default"
means the default ofConfiguration
(the default depends on theConfiguration#Configuration(Version) incompatible_improvements
, but a bug existed in 2.3.21 where that was ignored),"default_2_3_0"
(means the deprecatedObjectWrapper.DEFAULT_WRAPPER
)"simple"
(means the deprecatedObjectWrapper.SIMPLE_WRAPPER
),"beans"
(means the deprecatedObjectWrapper.BEANS_WRAPPER
orBeansWrapperBuilder.build()
),"jython"
(meansObjectWrapper.DEFAULT_WRAPPER
)"number_format"
: SeesetNumberFormat(String)
."boolean_format"
: SeesetBooleanFormat(String)
."date_format", "time_format", "datetime_format"
: SeesetDateFormat(String)
,setTimeFormat(String)
,setDateTimeFormat(String)
."time_zone"
: SeesetTimeZone(TimeZone)
.
String value: With the format asTimeZone.getTimeZone(String)
defines it. Also, since 2.3.21"JVM default"
can be used that will be replaced with the actual JVM default time zone whensetSetting(String, String)
is called. For example"GMT-8:00"
or"America/Los_Angeles"
If you set this setting, consider settingsql_date_and_time_time_zone
too (see below)!sql_date_and_time_time_zone
: SeesetSQLDateAndTimeTimeZone(TimeZone)
. Since 2.3.21.
String value: With the format asTimeZone.getTimeZone(String)
defines it. Also,"JVM default"
can be used that will be replaced with the actual JVM default time zone whensetSetting(String, String)
is called. Also"null"
can be used, which has the same effect assetSQLDateAndTimeTimeZone(null)
."output_encoding"
: SeesetOutputEncoding(String)
."url_escaping_charset"
: SeesetURLEscapingCharset(String)
."auto_flush"
: SeesetAutoFlush(boolean)
. Since 2.3.17.
String value:"true"
,"false"
,"y"
, etc."auto_import"
: SeesetAutoImports(Map)
String value is something like:/lib/form.ftl as f, /lib/widget as w, "/lib/odd name.ftl" as odd
"auto_include"
: Sets the list of auto-includes. SeesetAutoIncludes(List)
String value is something like:/include/common.ftl, "/include/evil name.ftl"
"lazy_auto_imports"
: SeesetLazyAutoImports(Boolean)
.
String value:"true"
,"false"
(also the equivalents:"yes"
,"no"
,"t"
,"f"
,"y"
,"n"
), case insensitive. Also can be"null"
."lazy_imports"
: SeesetLazyImports(boolean)
.
String value:"true"
,"false"
(also the equivalents:"yes"
,"no"
,"t"
,"f"
,"y"
,"n"
), case insensitive."new_builtin_class_resolver"
: SeesetNewBuiltinClassResolver(TemplateClassResolver)
. Since 2.3.17. The value must be one of these (ignore the quotation marks):"unrestricted"
: UseTemplateClassResolver.UNRESTRICTED_RESOLVER
"safer"
: UseTemplateClassResolver.SAFER_RESOLVER
"allows_nothing"
(or"allowsNothing"
): UseTemplateClassResolver.ALLOWS_NOTHING_RESOLVER
Something that contains colon will use
OptInTemplateClassResolver
and is expected to store comma separated values (possibly quoted) segmented with"allowed_classes:"
(or"allowedClasses:"
) and/or"trusted_templates:"
(or"trustedTemplates:"
). Examples of valid values:Setting value Meaning allowed_classes: com.example.C1, com.example.C2, trusted_templates: lib/*, safe.ftl
Only allow instantiating the com.example.C1
andcom.example.C2
classes. But, allow templates within thelib/
directory (likelib/foo/bar.ftl
) and templatesafe.ftl
(that does not matchfoo/safe.ftl
, only exactlysafe.ftl
) to instantiate anything thatTemplateClassResolver.SAFER_RESOLVER
allows.allowed_classes: com.example.C1, com.example.C2
Only allow instantiating the com.example.C1
andcom.example.C2
classes. There are no trusted templates.trusted_templates: lib/*, safe.ftl
Do not allow instantiating any classes, except in templates inside lib/
or in templatesafe.ftl
.For more details see
OptInTemplateClassResolver
.Otherwise if the value contains dot, it's interpreted as an object builder expression.
"show_error_tips"
: SeesetShowErrorTips(boolean)
. Since 2.3.21.
String value:"true"
,"false"
,"y"
, etc.api_builtin_enabled
: SeesetAPIBuiltinEnabled(boolean)
. Since 2.3.22.
String value:"true"
,"false"
,"y"
, etc."truncate_builtin_algorithm"
: SeesetTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm)
. Since 2.3.19.
String value: An object builder expression, or one of the predefined values (case insensitive),ascii
(forDefaultTruncateBuiltinAlgorithm.ASCII_INSTANCE
) andunicode
(forDefaultTruncateBuiltinAlgorithm.UNICODE_INSTANCE
).
Example object builder expressions:
Use"..."
as terminator (and same as markup terminator), and add space if the truncation happened on word boundary:DefaultTruncateBuiltinAlgorithm("...", true)
Use"..."
as terminator, and also a custom HTML for markup terminator, and add space if the truncation happened on word boundary:DefaultTruncateBuiltinAlgorithm("...", markup(HTMLOutputFormat(), "<span class=trunc>...</span>"), true)
Recreate default truncate algorithm, but with not preferring truncation at word boundaries (i.e., withwordBoundaryMinLength
1.0):freemarker.core.DefaultTruncateBuiltinAlgorithm(
DefaultTruncateBuiltinAlgorithm.STANDARD_ASCII_TERMINATOR, null, null,
DefaultTruncateBuiltinAlgorithm.STANDARD_M_TERMINATOR, null, null,
true, 1.0)
Configuration
(a subclass ofConfigurable
) also understands these:"auto_escaping"
: SeeConfiguration.setAutoEscapingPolicy(int)
String value:"enable_if_default"
or"enableIfDefault"
forConfiguration.ENABLE_IF_DEFAULT_AUTO_ESCAPING_POLICY
,"enable_if_supported"
or"enableIfSupported"
forConfiguration.ENABLE_IF_SUPPORTED_AUTO_ESCAPING_POLICY
,"force"
forConfiguration.FORCE_AUTO_ESCAPING_POLICY
, or"disable"
forConfiguration.DISABLE_AUTO_ESCAPING_POLICY
."default_encoding"
: SeeConfiguration.setDefaultEncoding(String)
; since 2.3.26 also accepts value "JVM default" (not case sensitive) to set the Java environment default value.
As the default value is the system default, which can change from one server to another, you should always set this!"localized_lookup"
: SeeConfiguration.setLocalizedLookup(boolean)
.
String value:"true"
,"false"
(also the equivalents:"yes"
,"no"
,"t"
,"f"
,"y"
,"n"
). Case insensitive."output_format"
: SeeConfiguration.setOutputFormat(OutputFormat)
.
String value:"default"
(case insensitive) for the default, one ofundefined
,HTML
,XHTML
,XML
,RTF
,plainText
,CSS
,JavaScript
,JSON
, or an object builder expression that gives anOutputFormat
, for exampleHTMLOutputFormat
, orcom.example.MyOutputFormat()
."registered_custom_output_formats"
: SeeConfiguration.setRegisteredCustomOutputFormats(Collection)
.
String value: an object builder expression that gives aList
ofOutputFormat
-s. Example:[com.example.MyOutputFormat(), com.example.MyOtherOutputFormat()]
"strict_syntax"
: SeeConfiguration.setStrictSyntaxMode(boolean)
. Deprecated.
String value:"true"
,"false"
,yes
, etc."whitespace_stripping"
: SeeConfiguration.setWhitespaceStripping(boolean)
.
String value:"true"
,"false"
,yes
, etc."cache_storage"
: SeeConfiguration.setCacheStorage(freemarker.cache.CacheStorage)
.
String value: If the value contains dot, then it's interpreted as an object builder expression. If the value does not contain dot, then aMruCacheStorage
will be used with the maximum strong and soft sizes specified with the setting value. Examples of valid setting values:Setting value max. strong size max. soft size "strong:50, soft:500"
50 500 "strong:100, soft"
100 Integer.MAX_VALUE
"strong:100"
100 0 "soft:100"
0 100 "strong"
Integer.MAX_VALUE
0 "soft"
0 Integer.MAX_VALUE
The value is not case sensitive. The order of
soft
andstrong
entries is not significant."template_update_delay"
: Template update delay in seconds (not in milliseconds) if no unit is specified; seeConfiguration.setTemplateUpdateDelayMilliseconds(long)
for more.
String value: Valid positive integer, optionally followed by a time unit (recommended). The default unit is seconds. It's strongly recommended to specify the unit for clarity, like in "500 ms" or "30 s". Supported units are: "s" (seconds), "ms" (milliseconds), "m" (minutes), "h" (hours). The whitespace between the unit and the number is optional. Units are only supported since 2.3.23."tag_syntax"
: SeeConfiguration.setTagSyntax(int)
.
String value: Must be one of"auto_detect"
,"angle_bracket"
, and"square_bracket"
(like[#if x]
).
Note that setting the"tagSyntax"
to"square_bracket"
does not change${x}
to[=...]
; that's interpolation syntax, so use the"interpolation_syntax"
setting for that, not this setting."interpolation_syntax"
(since 2.3.28): SeeConfiguration.setInterpolationSyntax(int)
.
String value: Must be one of"legacy"
,"dollar"
, and"square_bracket"
(like[=x]
).
Note that setting the"interpolation_syntax"
to"square_bracket"
does not change<#if x>
to[#if x]
; that's tag syntax, so use the"tag_syntax"
setting for that, not this setting."naming_convention"
: SeeConfiguration.setNamingConvention(int)
.
String value: Must be one of"auto_detect"
,"legacy"
, and"camel_case"
."fallback_on_null_loop_variable"
: SeeConfiguration.setFallbackOnNullLoopVariable(boolean)
.
String value:"true"
,"false"
(also the equivalents:"yes"
,"no"
,"t"
,"f"
,"y"
,"n"
). Case insensitive."incompatible_improvements"
: SeeConfiguration.setIncompatibleImprovements(Version)
.
String value: version number like2.3.20
."incompatible_enhancements"
: See:Configuration.setIncompatibleEnhancements(String)
. This setting name is deprecated, use"incompatible_improvements"
instead."recognize_standard_file_extensions"
: SeeConfiguration.setRecognizeStandardFileExtensions(boolean)
.
String value:"default"
(case insensitive) for the default, or"true"
,"false"
,yes
, etc."template_configurations"
: See:Configuration.setTemplateConfigurations(freemarker.cache.TemplateConfigurationFactory)
.
String value: Interpreted as an object builder expression, can benull
."template_loader"
: See:Configuration.setTemplateLoader(TemplateLoader)
.
String value:"default"
(case insensitive) for the default, or else interpreted as an object builder expression."null"
is also allowed since 2.3.26."template_lookup_strategy"
: See:Configuration.setTemplateLookupStrategy(freemarker.cache.TemplateLookupStrategy)
.
String value:"default"
(case insensitive) for the default, or else interpreted as an object builder expression."template_name_format"
: See:Configuration.setTemplateNameFormat(freemarker.cache.TemplateNameFormat)
.
String value:"default"
(case insensitive) for the default,"default_2_3_0"
forTemplateNameFormat.DEFAULT_2_3_0
,"default_2_4_0"
forTemplateNameFormat.DEFAULT_2_4_0
."tab_size"
: SeeConfiguration.setTabSize(int)
.
Regarding object builder expressions (used by the setting values where it was indicated):
Before FreeMarker 2.3.21 it had to be a fully qualified class name, and nothing else.
Since 2.3.21, the generic syntax is:
className(constrArg1, constrArg2, ... constrArgN, propName1=propValue1, propName2=propValue2, ... propNameN=propValueN)
, whereclassName
is the fully qualified class name of the instance to create (except if we have builder class orINSTANCE
field around, but see that later),constrArg
-s are the values of constructor arguments, andpropName=propValue
-s set JavaBean properties (likex=1
meanssetX(1)
) on the created instance. You can have any number of constructor arguments and property setters, including 0. Constructor arguments must precede any property setters.-
Example:
com.example.MyObjectWrapper(1, 2, exposeFields=true, cacheSize=5000)
is nearly equivalent with this Java code:obj = new com.example.MyObjectWrapper(1, 2); obj.setExposeFields(true); obj.setCacheSize(5000);
-
If you have no constructor arguments and property setters, and the
className
class has a public staticINSTANCE
field, the value of that filed will be the value of the expression, and the constructor won't be called. Note that if you use the backward compatible syntax, where there's no parenthesis after the class name, then it will not look forINSTANCE
. -
If there exists a class named
classNameBuilder
, then that class will be instantiated instead with the given constructor arguments, and the JavaBean properties of that builder instance will be set. After that, the publicbuild()
method of the instance will be called, whose return value will be the value of the whole expression. (The builder class and thebuild()
method is simply found by name, there's no special interface to implement.) Note that if you use the backward compatible syntax, where these's no parenthesis after the class name, then it will not look for builder class. Note that if you have a builder class, you don't actually need aclassName
class (since 2.3.24); after all,classNameBuilder.build()
can return any kind of object. -
Currently, the values of arguments and properties can only be one of these:
- A numerical literal, like
123
or-1.5
. The value will be automatically converted to the type of the target (just like in FTL). However, a target type is only available if the number will be a parameter to a method or constructor, not when it's a value (or key) in aList
orMap
literal. Thus in the last case the type of number will be like in Java language, like1
is anint
, and1.0
is adouble
, and1.0f
is afloat
, etc. In all cases, the standard Java type postfixes can be used ("f", "d", "l"), plus "bd" forBigDecimal
and "bi" forBigInteger
. - A boolean literal:
true
orfalse
- The null literal:
null
- A string literal with FTL syntax, except that it can't contain
${...}
-s and#{...}
-s. Examples:"Line 1\nLine 2"
orr"C:\temp"
. - A list literal (since 2.3.24) with FTL-like syntax, for example
[ 'foo', 2, true ]
. If the parameter is expected to be array, the list will be automatically converted to array. The list items can be any kind of expression, like even object builder expressions. - A map literal (since 2.3.24) with FTL-like syntax, for example
{ 'foo': 2, 'bar': true }
. The keys and values can be any kind of expression, like even object builder expressions. The resulting Java object will be aMap
that keeps the item order (LinkedHashMap
as of this writing). - A reference to a public static filed, like
Configuration.AUTO_DETECT_TAG_SYNTAX
orcom.example.MyClass.MY_CONSTANT
. - An object builder expression. That is, object builder expressions can be nested into each other.
- A numerical literal, like
-
The same kind of expression as for parameters can also be used as top-level expressions (though it's
rarely useful, apart from using
null
). -
The top-level object builder expressions may omit
()
. In that case, for backward compatibility, theINSTANCE
field and the builder class is not searched, so the instance will be always created with its parameterless constructor. (This behavior will possibly change in 2.4.) The()
can't be omitted for nested expressions. -
The following classes can be referred to with simple (unqualified) name instead of fully qualified name:
DefaultObjectWrapper
,BeansWrapper
,SimpleObjectWrapper
,Locale
,TemplateConfiguration
,PathGlobMatcher
,FileNameGlobMatcher
,PathRegexMatcher
,AndMatcher
,OrMatcher
,NotMatcher
,ConditionalTemplateConfigurationFactory
,MergingTemplateConfigurationFactory
,FirstMatchTemplateConfigurationFactory
,HTMLOutputFormat
,XMLOutputFormat
,RTFOutputFormat
,PlainTextOutputFormat
,UndefinedOutputFormat
,Configuration
,DefaultTruncateBuiltinAlgorithm
. -
TimeZone
objects can be created likeTimeZone("UTC")
, despite that there's no a such constructor (since 2.3.24). -
TemplateMarkupOutputModel
objects can be created likemarkup(HTMLOutputFormat(), "<h1>Example</h1>")
(since 2.3.29). Of course the 1st argument can be any otherMarkupOutputFormat
too. -
The classes and methods that the expression meant to access must be all public.
- Parameters:
name
- the name of the setting.value
- the string that describes the new value of the setting.- Throws:
Configurable.UnknownSettingException
- if the name is wrong.TemplateException
- if the new value of the setting can't be set for any other reasons.
-
getSettingNames
Returns the valid setting names that aren'tConfiguration
-only.- Parameters:
camelCase
- If we want the setting names with camel case naming convention, or with snake case (legacy) naming convention.- Since:
- 2.3.24
- See Also:
Configuration.getSettingNames(boolean)
-
setStrictBeanModels
Deprecated.Set this on theObjectWrapper
itself. -
getSetting
Deprecated.It's not possible in general to convert setting values to string, and thus it's impossible to ensure thatsetSetting(String, String)
will work with the returned value correctly.Returns the textual representation of a setting.- Parameters:
key
- the setting key. Can be any of standardXXX_KEY
constants, or a custom key.
-
getSettings
Deprecated.This method was always defective, and certainly it always will be. Don't use it. (Simply, it's hardly possible in general to convert setting values to text in a way that ensures thatsetSettings(Properties)
will work with them correctly.)This meant to return the String-to-StringMap
of the settings. So it actually should return aProperties
object, but it doesn't by mistake. The returnedMap
is read-only, but it will reflect the further configuration changes (aliasing effect). -
getEnvironment
-
unknownSettingException
Creates the exception that should be thrown when a setting name isn't recognized. -
getCorrectedNameForUnknownSetting
- Parameters:
name
- The wrong name- Returns:
- The corrected name, or
null
if there's no known correction - Since:
- 2.3.21
-
settingValueAssignmentException
protected TemplateException settingValueAssignmentException(String name, String value, Throwable cause)- Since:
- 2.3.21
-
invalidSettingValueException
-
setSettings
Set the settings stored in aProperties
object.- Throws:
TemplateException
- if theProperties
object contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.
-
setSettings
Reads a setting list (key and element pairs) from the input stream. The stream has to follow the usual.properties
format.- Throws:
TemplateException
- if the stream contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.IOException
- if an error occurred when reading from the input stream.
-
setCustomAttribute
Sets a named custom attribute for this configurable.- Parameters:
name
- the name of the custom attributevalue
- the value of the custom attribute. You can set the value to null, however note that there is a semantic difference between an attribute set to null and an attribute that is not present, seeremoveCustomAttribute(String)
.
-
getCustomAttributeNames
Returns an array with names of all custom attributes defined directly on this configurable. (That is, it doesn't contain the names of custom attributes defined indirectly on its parent configurables.) The returned array is never null, but can be zero-length. The order of elements in the returned array is not defined and can change between invocations. -
removeCustomAttribute
Removes a named custom attribute for this configurable. Note that this is different than setting the custom attribute value to null. If you set the value to null,getCustomAttribute(String)
will return null, while if you remove the attribute, it will return the value of the attribute in the parent configurable (if there is a parent configurable, that is).- Parameters:
name
- the name of the custom attribute
-
getCustomAttribute
Retrieves a named custom attribute for this configurable. If the attribute is not present in the configurable, and the configurable has a parent, then the parent is looked up as well.- Parameters:
name
- the name of the custom attribute- Returns:
- the value of the custom attribute. Note that if the custom attribute
was created with
<#ftl attributes={...}>
, then this value is already unwrapped (i.e. it's aString
, or aList
, or aMap
, ...etc., not a FreeMarker specific class).
-
doAutoImportsAndIncludes
Executes the auto-imports and auto-includes for the main template of this environment. This is not meant to be called or overridden by code outside of FreeMarker.- Throws:
TemplateException
IOException
-
parseAsList
- Throws:
ParseException
-
parseAsSegmentedList
- Throws:
ParseException
-
parseAsImportList
- Throws:
ParseException
-
STRICT_BEAN_MODELS_KEY
instead.