Class AbstractTemplateResolver
- Object
-
- org.thymeleaf.templateresolver.AbstractTemplateResolver
-
- All Implemented Interfaces:
ITemplateResolver
- Direct Known Subclasses:
AbstractConfigurableTemplateResolver,DefaultTemplateResolver,StringTemplateResolver
public abstract class AbstractTemplateResolver extends Object implements ITemplateResolver
Convenience base class for all Template Resolvers.
Note a class with this name existed since 1.0, but it was completely reimplemented in Thymeleaf 3.0
- Since:
- 3.0.0
- Author:
- Daniel Fernández
-
-
Field Summary
Fields Modifier and Type Field Description static booleanDEFAULT_EXISTENCE_CHECKBy default, resources will not be checked their existence before being returned.static booleanDEFAULT_USE_DECOUPLED_LOGICBy default, resources will not be marked to look for decoupled logic.
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractTemplateResolver()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected booleancomputeResolvable(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)Computes whether a template can be resolved by this resolver or not, applying the corresponding patterns.protected abstract TemplateModecomputeTemplateMode(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)Computes the template mode that should be applied to a template, according to existing configuration.protected abstract ITemplateResourcecomputeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)Computes the resolved template resource.protected abstract ICacheEntryValiditycomputeValidity(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)Computes the validity to be applied to the template resolution.booleangetCheckExistence()Returns whether template resources will be checked for existence before being returned or not.StringgetName()Returns the name of the template resolverIntegergetOrder()Returns the order in which this template resolver will be asked to resolve templates as a part of the chain of resolvers configured into the template engine.Set<String>getResolvablePatterns()Returns the patterns (as String) specified for establishing which templates can be resolved by this template resolver.PatternSpecgetResolvablePatternSpec()Returns the pattern spec specified for establishing which templates can be resolved by this template resolver.booleangetUseDecoupledLogic()Returns whether a separate (decoupled) resource containing template logic should be checked for existence and its instructions included into the resolved template during parsing.TemplateResolutionresolveTemplate(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)Tries to resolve a template.voidsetCheckExistence(boolean checkExistence)Sets whether template resources will be checked for existence before being returned or not.voidsetName(String name)Sets a new name for the Template Resolver.voidsetOrder(Integer order)Sets a new order for the template engine in the chain.voidsetResolvablePatterns(Set<String> resolvablePatterns)Sets the new patterns to be applied for establishing which templates can be resolved by this template resolver.voidsetUseDecoupledLogic(boolean useDecoupledLogic)Sets whether a separate (decoupled) resource containing template logic should be checked for existence and its instructions included into the resolved template during parsing.
-
-
-
Field Detail
-
DEFAULT_EXISTENCE_CHECK
public static final boolean DEFAULT_EXISTENCE_CHECK
By default, resources will not be checked their existence before being returned. This tries to avoid a possible performance impact from performing a double access to the resource (one for checking existence, another one for reading it).
- See Also:
- Constant Field Values
-
DEFAULT_USE_DECOUPLED_LOGIC
public static final boolean DEFAULT_USE_DECOUPLED_LOGIC
By default, resources will not be marked to look for decoupled logic.
- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
public final String getName()
Returns the name of the template resolver
- Specified by:
getNamein interfaceITemplateResolver- Returns:
- the name of the template resolver
-
setName
public void setName(String name)
Sets a new name for the Template Resolver.
- Parameters:
name- the new name
-
getOrder
public final Integer getOrder()
Returns the order in which this template resolver will be asked to resolve templates as a part of the chain of resolvers configured into the template engine.
Order should start with 1.
- Specified by:
getOrderin interfaceITemplateResolver- Returns:
- the order in which this template resolver will be called in the chain.
-
setOrder
public void setOrder(Integer order)
Sets a new order for the template engine in the chain. Order should start with 1.
- Parameters:
order- the new order.
-
getResolvablePatternSpec
public final PatternSpec getResolvablePatternSpec()
Returns the pattern spec specified for establishing which templates can be resolved by this template resolver. For those templates which names do not match this patterns, the Template Resolver will return null.
This allows for a fast discard of those templates that the developer might know for sure that will not be resolvable by the Resource Resolver used by this Template Resolver, so that an execution of the resource resolver is not needed.
- Returns:
- the pattern spec
-
getResolvablePatterns
public final Set<String> getResolvablePatterns()
Returns the patterns (as String) specified for establishing which templates can be resolved by this template resolver. For those templates which names do not match this patterns, the Template Resolver will return null.
This allows for a fast discard of those templates that the developer might know for sure that will not be resolvable by the Resource Resolver used by this Template Resolver, so that an execution of the resource resolver is not needed.
This is a convenience method equivalent to
getResolvablePatternSpec().getPatterns()- Returns:
- the pattern spec
-
setResolvablePatterns
public void setResolvablePatterns(Set<String> resolvablePatterns)
Sets the new patterns to be applied for establishing which templates can be resolved by this template resolver. For those templates which names do not match this patterns, the Template Resolver will return null.
This allows for a fast discard of those templates that the developer might know for sure that will not be resolvable by the Resource Resolver used by this Template Resolver, so that an execution of the resource resolver is not needed.
This is a convenience method equivalent to
getResolvablePatternSpec().setPatterns(Set<String>)- Parameters:
resolvablePatterns- the new patterns
-
getCheckExistence
public final boolean getCheckExistence()
Returns whether template resources will be checked for existence before being returned or not.
Default value is
FALSE.Checking resources for existence will make the template resolver execute
ITemplateResource.exists()for each resolved resource before returning aTemplateResolution, returningnullif the resource does not exist.This allows resolvers to pass control to the next
ITemplateResolverin the chain based on real resource existence and not only on the matching performed by the resolvable patterns specified atgetResolvablePatterns(). But at the same time, might pose a performance issue on certain scenarios (e.g. HTTP URL resolution) that require actually accessing the resource in order to determine its existence, being the resource accessed twice in those cases (once for determining its existence, another time for reading it).If this existence check is enabled and a resource is determined to not exist,
ITemplateResolver.resolveTemplate(IEngineConfiguration, String, String, Map)will returnnull.- Returns:
trueif resource existence will be checked,falseif not- Since:
- 3.0.0
-
setCheckExistence
public void setCheckExistence(boolean checkExistence)
Sets whether template resources will be checked for existence before being returned or not.
Default value is
FALSE.Checking resources for existence will make the template resolver execute
ITemplateResource.exists()for each resolved resource before returning aTemplateResolution, returningnullif the resource does not exist.This allows resolvers to pass control to the next
ITemplateResolverin the chain based on real resource existence and not only on the matching performed by the resolvable patterns specified atgetResolvablePatterns(). But at the same time, might pose a performance issue on certain scenarios (e.g. HTTP URL resolution) that require actually accessing the resource in order to determine its existence, being the resource accessed twice in those cases (once for determining its existence, another time for reading it).If this existence check is enabled and a resource is determined to not exist,
ITemplateResolver.resolveTemplate(IEngineConfiguration, String, String, Map)will returnnull.- Parameters:
checkExistence-trueif resource existence should be checked,falseif not- Since:
- 3.0.0
-
getUseDecoupledLogic
public final boolean getUseDecoupledLogic()
Returns whether a separate (decoupled) resource containing template logic should be checked for existence and its instructions included into the resolved template during parsing.
This mechanism allows the creation of pure HTML or XML markup templates, which acquire their logic from an external resource. The way this decoupled resources are resolved is defined by a configured implementation of the
IDecoupledTemplateLogicResolverinterface.Note this flag can only be
truefor theTemplateMode.HTMLandTemplateMode.XMLtemplate modes. Also, note that setting this flag totruedoes not mean that a resource with decoupled logic must exist for the resolved template, only that it can exist.Decoupled logic extracted from these additional resources is injected into the resolved templates in real-time as the resolved templates are parsed and processed. This greatly reduces overhead caused by decoupled parsing for non-cacheable templates, and completely removes any overhead for cached templates.
Default value is
FALSE.- Returns:
trueif decoupled logic resources should be checked,falseif not.- Since:
- 3.0.0
-
setUseDecoupledLogic
public void setUseDecoupledLogic(boolean useDecoupledLogic)
Sets whether a separate (decoupled) resource containing template logic should be checked for existence and its instructions included into the resolved template during parsing.
This mechanism allows the creation of pure HTML or XML markup templates, which acquire their logic from an external resource. The way this decoupled resources are resolved is defined by a configured implementation of the
IDecoupledTemplateLogicResolverinterface.Note this flag can only be
truefor theTemplateMode.HTMLandTemplateMode.XMLtemplate modes. Also, note that setting this flag totruedoes not mean that a resource with decoupled logic must exist for the resolved template, only that it can exist and therefore it should be checked.Decoupled logic extracted from these additional resources is injected into the resolved templates in real-time as the resolved templates are parsed and processed. This greatly reduces overhead caused by decoupled parsing for non-cacheable templates, and completely removes any overhead for cached templates.
Default value is
FALSE.- Parameters:
useDecoupledLogic-trueif resource existence should be checked,falseif not- Since:
- 3.0.0
-
resolveTemplate
public final TemplateResolution resolveTemplate(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)
Description copied from interface:ITemplateResolverTries to resolve a template.
The method arguments contain all the info needed for trying to resolve the template. The Template Resolver will apply its configuration (prefixes/suffixes, template mode patterns, cache configurations, etc) and return a
TemplateResolutionobject.The
ownerTemplate, which might be null, will be specified when the template is resolved in order to be used as a fragent to be inserted into a higher level template (the owner). Most template resolver implementations will simply ignore this argument, but others might change their resolution results depending on the owner template that is inserting the resolved fragment.The fact that a Template Resolver returns a
TemplateResolutiondoes not necessarily mean that the resolved template resource exists. It might only be so if the template resolver is configured to perform an existence check on the resource before returning a resolution result (by means of callingITemplateResource.exists()), which might be configurable on a per-ITemplateResolver-implementation basis. Implementations might choose not to check resource existance by default in order to avoid the possible performance impact of a double access to the resource.Note that the template selectors that might be used for a executing or inserting a template are not specified to the template resolver. The reason is template selectors are applied by the parser, not the template resolvers, and allowing the resolver to take any decisions based on template selectors (like e.g. omitting some output from the resource) could harm the correctness of the selection operation performed by the parser.
- Specified by:
resolveTemplatein interfaceITemplateResolver- Parameters:
configuration- the engine configuration.ownerTemplate- the containing template from which we want to resolve a new one as a fragment. Can be null.template- the template to be resolved (usually its name).templateResolutionAttributes- the template resolution attributes to be used (usually coming from aTemplateSpecinstance. Can be null.- Returns:
- a TemplateResolution object (which might represent an existing resource or not), or null if the template could not be resolved.
-
computeResolvable
protected boolean computeResolvable(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)
Computes whether a template can be resolved by this resolver or not, applying the corresponding patterns. Meant only for use or override by subclasses.
- Parameters:
configuration- the engine configuration.ownerTemplate- the owner template, if the resource being computed is a fragment. Might be null.template- the template to be resolved (usually its name).templateResolutionAttributes- the template resolution attributes, if any. Might be null.- Returns:
- whether the template is resolvable or not.
-
computeTemplateResource
protected abstract ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)
Computes the resolved template resource.
- Parameters:
configuration- the engine configuration.ownerTemplate- the owner template, if the resource being computed is a fragment. Might be null.template- the template to be resolved (usually its name).templateResolutionAttributes- the template resolution attributes, if any. Might be null.- Returns:
- the template resource, or null if this template cannot be resolved (or the resource does not exist).
-
computeTemplateMode
protected abstract TemplateMode computeTemplateMode(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)
Computes the template mode that should be applied to a template, according to existing configuration.
- Parameters:
configuration- the engine configuration.ownerTemplate- the owner template, if the resource being computed is a fragment. Might be null.template- the template to be resolved (usually its name).templateResolutionAttributes- the template resolution attributes, if any. Might be null.- Returns:
- the template mode proposed by the template resolver for the resolved template.
-
computeValidity
protected abstract ICacheEntryValidity computeValidity(IEngineConfiguration configuration, String ownerTemplate, String template, Map<String,Object> templateResolutionAttributes)
Computes the validity to be applied to the template resolution. This includes determining whether the template can be cached or not, and also in what circumstances (for instance, for how much time) can its cache entry be considered valid.
- Parameters:
configuration- the engine configuration.ownerTemplate- the owner template, if the resource being computed is a fragment. Might be null.template- the template to be resolved (usually its name).templateResolutionAttributes- the template resolution attributes, if any. Might be null.- Returns:
- the validity
-
-