Class WebEngineContext
- Object
-
- org.thymeleaf.context.AbstractEngineContext
-
- org.thymeleaf.context.WebEngineContext
-
- All Implemented Interfaces:
IContext
,IEngineContext
,IExpressionContext
,ITemplateContext
,IWebContext
public class WebEngineContext extends AbstractEngineContext implements IEngineContext, IWebContext
Basic web implementation of the
IEngineContext
interface, based on the Servlet API.This is the context implementation that will be used by default for web processing. Note that this is an internal implementation, and there is no reason for users' code to directly reference or use it instead of its implemented interfaces.
This class is NOT thread-safe. Thread-safety is not a requirement for context implementations.
- Since:
- 3.0.0
- Author:
- Daniel Fernández
-
-
Constructor Summary
Constructors Constructor Description WebEngineContext(IEngineConfiguration configuration, TemplateData templateData, Map<String,Object> templateResolutionAttributes, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext, Locale locale, Map<String,Object> variables)
Creates a new instance of thisIEngineContext
implementation binding engine execution to the Servlet API.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
containsVariable(String name)
Checks whether a specific variable is already contained in this context or not.void
decreaseLevel()
Decrease the context level.List<IProcessableElementTag>
getElementStack()
Returns the list of all theIProcessableElementTag
objects corresponding to the hierarchy of elements (open or standalone elements) that had to be processed in order to reach the current point in execution.List<IProcessableElementTag>
getElementStackAbove(int contextLevel)
Retrieves the element stack just likeITemplateContext.getElementStack()
, but only for those elements added to the hierarchy above a specific context level.IInliner
getInliner()
Returns the inliner (implementation ofIInliner
) set to be used at the current point of execution.javax.servlet.http.HttpServletRequest
getRequest()
Returns theHttpServletRequest
object associated with the template execution.javax.servlet.http.HttpServletResponse
getResponse()
Returns theHttpServletResponse
object associated with the template execution.Object
getSelectionTarget()
Returns the selection target set for the current point of execution (ornull
if there isn't any).javax.servlet.ServletContext
getServletContext()
Returns theServletContext
object associated with the template execution.javax.servlet.http.HttpSession
getSession()
Returns theHttpSession
object associated with the template execution, or null if there is no session.String
getStringRepresentationByLevel()
TemplateData
getTemplateData()
Returns the template data object containing metadata about the template currently being processed.List<TemplateData>
getTemplateStack()
Returns the list of all theTemplateData
objects corresponding to all the templates that have been nested in order to reach the current execution point.Object
getVariable(String key)
Retrieve a specific variable, by name.Set<String>
getVariableNames()
Get a list with all the names of variables contained at this context.boolean
hasSelectionTarget()
Returns whether the current template has set a selection target for the current point of execution or not.void
increaseLevel()
Increase the context level.boolean
isVariableLocal(String name)
Checks whether a specific variable is local or not.int
level()
Return the current context level.void
removeVariable(String name)
Removes a variable from the context.void
setElementTag(IProcessableElementTag elementTag)
Sets a new element tag (IProcessableElementTag
) into the hierarchy (stack) of element tags.void
setInliner(IInliner inliner)
Set an inliner.void
setSelectionTarget(Object selectionTarget)
Set a selection target.void
setTemplateData(TemplateData templateData)
Sets a new template metadata object (TemplateData
) for the current execution point, specifying that the elements and nodes that are to be processed from now on (until the context level is decreased below the current level) originally belonged to a different template.void
setVariable(String name, Object value)
Sets a new variable into the context.void
setVariables(Map<String,Object> variables)
Sets several variables at a time into the context.String
toString()
-
Methods inherited from class org.thymeleaf.context.AbstractEngineContext
buildLink, getConfiguration, getExpressionObjects, getIdentifierSequences, getLocale, getMessage, getModelFactory, getTemplateMode, getTemplateResolutionAttributes
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.thymeleaf.context.IExpressionContext
getConfiguration, getExpressionObjects
-
Methods inherited from interface org.thymeleaf.context.ITemplateContext
buildLink, getIdentifierSequences, getMessage, getModelFactory, getTemplateMode, getTemplateResolutionAttributes
-
-
-
-
Constructor Detail
-
WebEngineContext
public WebEngineContext(IEngineConfiguration configuration, TemplateData templateData, Map<String,Object> templateResolutionAttributes, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext, Locale locale, Map<String,Object> variables)
Creates a new instance of this
IEngineContext
implementation binding engine execution to the Servlet API.Note that implementations of
IEngineContext
are not meant to be used in order to call the template engine (use implementations ofIContext
such asContext
orWebContext
instead). This is therefore mostly an internal implementation, and users should have no reason to ever call this constructor except in very specific integration/extension scenarios.- Parameters:
configuration
- the configuration instance being used.templateData
- the template data for the template to be processed.templateResolutionAttributes
- the template resolution attributes.request
- the servlet request object.response
- the servlet response object.servletContext
- the servlet context object.locale
- the locale.variables
- the context variables, probably coming from anotherIContext
implementation.
-
-
Method Detail
-
getRequest
public javax.servlet.http.HttpServletRequest getRequest()
Description copied from interface:IWebContext
Returns the
HttpServletRequest
object associated with the template execution.- Specified by:
getRequest
in interfaceIWebContext
- Returns:
- the request object.
-
getResponse
public javax.servlet.http.HttpServletResponse getResponse()
Description copied from interface:IWebContext
Returns the
HttpServletResponse
object associated with the template execution.- Specified by:
getResponse
in interfaceIWebContext
- Returns:
- the response object.
-
getSession
public javax.servlet.http.HttpSession getSession()
Description copied from interface:IWebContext
Returns the
HttpSession
object associated with the template execution, or null if there is no session.- Specified by:
getSession
in interfaceIWebContext
- Returns:
- the session object. Might be null if no session has been created.
-
getServletContext
public javax.servlet.ServletContext getServletContext()
Description copied from interface:IWebContext
Returns the
ServletContext
object associated with the template execution.- Specified by:
getServletContext
in interfaceIWebContext
- Returns:
- the servlet context object.
-
containsVariable
public boolean containsVariable(String name)
Description copied from interface:IContext
Checks whether a specific variable is already contained in this context or not.
- Specified by:
containsVariable
in interfaceIContext
- Parameters:
name
- the name of the variable to be checked.- Returns:
true
if the variable is already contained,false
if not.
-
getVariable
public Object getVariable(String key)
Description copied from interface:IContext
Retrieve a specific variable, by name.
- Specified by:
getVariable
in interfaceIContext
- Parameters:
key
- the name of the variable to be retrieved.- Returns:
- the variable's value.
-
getVariableNames
public Set<String> getVariableNames()
Description copied from interface:IContext
Get a list with all the names of variables contained at this context.
- Specified by:
getVariableNames
in interfaceIContext
- Returns:
- the variable names.
-
setVariable
public void setVariable(String name, Object value)
Description copied from interface:IEngineContext
Sets a new variable into the context.
Depending on the context level, determined by
IEngineContext.increaseLevel()
andIEngineContext.decreaseLevel()
, the variable being set might be considered a local variable and thus disappear from context once the context level is decreased below the level the variable was created at.- Specified by:
setVariable
in interfaceIEngineContext
- Parameters:
name
- the name of the variable.value
- the value of the variable.
-
setVariables
public void setVariables(Map<String,Object> variables)
Description copied from interface:IEngineContext
Sets several variables at a time into the context.
Depending on the context level, determined by
IEngineContext.increaseLevel()
andIEngineContext.decreaseLevel()
, the variables being set might be considered a local variables and thus disappear from context once the context level is decreased below the level the variable was created at.- Specified by:
setVariables
in interfaceIEngineContext
- Parameters:
variables
- the variables to be set.
-
removeVariable
public void removeVariable(String name)
Description copied from interface:IEngineContext
Removes a variable from the context.
Depending on the context level, determined by
IEngineContext.increaseLevel()
andIEngineContext.decreaseLevel()
, this removal might be considered local variable-related and thus cease to happen (i.e. the variable would be recovered) once the context level is decreased below the level the variable was created at.- Specified by:
removeVariable
in interfaceIEngineContext
- Parameters:
name
- the name of the variable to be removed.
-
isVariableLocal
public boolean isVariableLocal(String name)
Description copied from interface:IEngineContext
Checks whether a specific variable is local or not.
This means checking if the context level at which the variable was defined was 0 or not.
- Specified by:
isVariableLocal
in interfaceIEngineContext
- Parameters:
name
- the name of the variable to be checked.- Returns:
true
if the variable is local (level > 0),false
if not (level == 0).
-
hasSelectionTarget
public boolean hasSelectionTarget()
Description copied from interface:ITemplateContext
Returns whether the current template has set a selection target for the current point of execution or not.
Selection targets are objects on which all
*{...}
expression will be executed (instead of on the root context). They are normally set by means ofth:objects
.- Specified by:
hasSelectionTarget
in interfaceITemplateContext
- Returns:
true
if there is a selection target,false
if not.
-
getSelectionTarget
public Object getSelectionTarget()
Description copied from interface:ITemplateContext
Returns the selection target set for the current point of execution (or
null
if there isn't any).Selection targets are objects on which all
*{...}
expression will be executed (instead of on the root context). They are normally set by means ofth:objects
.- Specified by:
getSelectionTarget
in interfaceITemplateContext
- Returns:
- the selection target, or null if there isn't any.
-
setSelectionTarget
public void setSelectionTarget(Object selectionTarget)
Description copied from interface:IEngineContext
Set a selection target. Usually the consequence of executing a
th:object
processor.Once set, all selection expressions (
*{...}
) will be executed on this target.This selection target will have the consideration of a local variable and thus depend on the context level (see
IEngineContext.setVariable(String, Object)
).- Specified by:
setSelectionTarget
in interfaceIEngineContext
- Parameters:
selectionTarget
- the selection target to be set.
-
getInliner
public IInliner getInliner()
Description copied from interface:ITemplateContext
Returns the inliner (implementation of
IInliner
) set to be used at the current point of execution.- Specified by:
getInliner
in interfaceITemplateContext
- Returns:
- the inliner to be used.
-
setInliner
public void setInliner(IInliner inliner)
Description copied from interface:IEngineContext
Set an inliner. Usually the consequence of executing a
th:inline
processor.This inliner will have the consideration of a local variable and thus depend on the context level (see
IEngineContext.setVariable(String, Object)
).- Specified by:
setInliner
in interfaceIEngineContext
- Parameters:
inliner
- the inliner to be set.
-
getTemplateData
public TemplateData getTemplateData()
Description copied from interface:ITemplateContext
Returns the template data object containing metadata about the template currently being processed.
Note that the
TemplateData
returned here corresponds with the origin of the elements or nodes being currently processed. This is, if a processor is being executed for an element inserted from an external template (via ath:insert
, for example), then this method will return the template data for the template in which the inserted fragment lives, not the one it was inserted into.- Specified by:
getTemplateData
in interfaceITemplateContext
- Returns:
- the template data corresponding to the elements or nodes being currently processed.
-
setTemplateData
public void setTemplateData(TemplateData templateData)
Description copied from interface:IEngineContext
Sets a new template metadata object (
TemplateData
) for the current execution point, specifying that the elements and nodes that are to be processed from now on (until the context level is decreased below the current level) originally belonged to a different template.A call on this method is usually the consequence of
th:insert
orth:replace
.- Specified by:
setTemplateData
in interfaceIEngineContext
- Parameters:
templateData
- the template data.
-
getTemplateStack
public List<TemplateData> getTemplateStack()
Description copied from interface:ITemplateContext
Returns the list of all the
TemplateData
objects corresponding to all the templates that have been nested in order to reach the current execution point.This is a way in which processors can know the complete execution route that lead to the execution of a specific event (e.g. Template A inserted fragment B, which inserted fragment C).
The first element in this list will always be the top-level template (the one called at the
ITemplateEngine
process(...)
methods).- Specified by:
getTemplateStack
in interfaceITemplateContext
- Returns:
- the stack of templates (list of
TemplateData
).
-
setElementTag
public void setElementTag(IProcessableElementTag elementTag)
Description copied from interface:IEngineContext
Sets a new element tag (
IProcessableElementTag
) into the hierarchy (stack) of element tags.This hierarchy of element tags (added this way) can be obtained with
ITemplateContext.getElementStack()
.- Specified by:
setElementTag
in interfaceIEngineContext
- Parameters:
elementTag
- the element tag.
-
getElementStack
public List<IProcessableElementTag> getElementStack()
Description copied from interface:ITemplateContext
Returns the list of all the
IProcessableElementTag
objects corresponding to the hierarchy of elements (open or standalone elements) that had to be processed in order to reach the current point in execution.If the element being processed is a tag (open/standalone), it will appear at the end of the list.
Note this hierarchy does not correspond with the tag hierarchy at the original template, but with the hierarchy of processing (many tags could appear during processing itself and not be present at the original template).
Also note that, because of this being the processing-time hierarchy, this information is set at the processor level, so it should not be considered to be available and/or valid at the pre-processor layer.
- Specified by:
getElementStack
in interfaceITemplateContext
- Returns:
- the stack of elements (list of
IProcessableElementTag
).
-
getElementStackAbove
public List<IProcessableElementTag> getElementStackAbove(int contextLevel)
Description copied from interface:IEngineContext
Retrieves the element stack just like
ITemplateContext.getElementStack()
, but only for those elements added to the hierarchy above a specific context level.- Specified by:
getElementStackAbove
in interfaceIEngineContext
- Parameters:
contextLevel
- the level above which we want to obtain the element stack.- Returns:
- the element stack above a specified level.
-
level
public int level()
Description copied from interface:IEngineContext
Return the current context level.
This method should only be called internally.
- Specified by:
level
in interfaceIEngineContext
- Returns:
- the current level
-
increaseLevel
public void increaseLevel()
Description copied from interface:IEngineContext
Increase the context level. This is usually a consequence of the
ProcessorTemplateHandler
detecting the start of a new element (i.e. handling anIOpenElementTag
event).This method should only be called internally.
- Specified by:
increaseLevel
in interfaceIEngineContext
-
decreaseLevel
public void decreaseLevel()
Description copied from interface:IEngineContext
Decrease the context level. This is usually a consequence of the
ProcessorTemplateHandler
detecting the closing of an element (i.e. handling anICloseElementTag
event).This method should only be called internally.
- Specified by:
decreaseLevel
in interfaceIEngineContext
-
getStringRepresentationByLevel
public String getStringRepresentationByLevel()
-
-