public class ScriptTemplateConfigurer extends Object implements ScriptTemplateConfig
ScriptTemplateConfig
for creating
a ScriptEngine
for use in a web application.
// Add the following to an @Configuration class @Bean public ScriptTemplateConfigurer mustacheConfigurer() { ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer(); configurer.setEngineName("nashorn"); configurer.setScripts("mustache.js"); configurer.setRenderObject("Mustache"); configurer.setRenderFunction("render"); return configurer; }
NOTE: It is possible to use non thread-safe script engines with
templating libraries not designed for concurrency, like Handlebars or React running on
Nashorn, by setting the sharedEngine
property to false
.
ScriptTemplateView
Constructor and Description |
---|
ScriptTemplateConfigurer()
Default constructor.
|
ScriptTemplateConfigurer(String engineName)
Create a new ScriptTemplateConfigurer using the given engine name.
|
Modifier and Type | Method and Description |
---|---|
Charset |
getCharset()
Return the charset used to read script and template files.
|
String |
getContentType()
Return the content type to use for the response.
|
ScriptEngine |
getEngine()
Return the
ScriptEngine to use by the views. |
String |
getEngineName()
Return the engine name that will be used to instantiate the
ScriptEngine . |
Supplier<ScriptEngine> |
getEngineSupplier()
Return the engine supplier that will be used to instantiate the
ScriptEngine . |
String |
getRenderFunction()
Return the render function name (optional).
|
String |
getRenderObject()
Return the object where the render function belongs (optional).
|
String |
getResourceLoaderPath()
Return the resource loader path(s) via a Spring resource location.
|
String[] |
getScripts()
Return the scripts to be loaded by the script engine (library or user provided).
|
Boolean |
isSharedEngine()
Return whether to use a shared engine for all threads or whether to create
thread-local engine instances for each thread.
|
void |
setCharset(Charset charset)
Set the charset used to read script and template files.
|
void |
setContentType(String contentType)
Set the content type to use for the response.
|
void |
setEngine(ScriptEngine engine)
Set the
ScriptEngine to use by the view. |
void |
setEngineName(String engineName)
Set the engine name that will be used to instantiate the
ScriptEngine . |
void |
setEngineSupplier(Supplier<ScriptEngine> engineSupplier)
Set the
ScriptEngine supplier to use by the view, usually used with
setSharedEngine(Boolean) set to false . |
void |
setRenderFunction(String renderFunction)
Set the render function name (optional).
|
void |
setRenderObject(String renderObject)
Set the object where the render function belongs (optional).
|
void |
setResourceLoaderPath(String resourceLoaderPath)
Set the resource loader path(s) via a Spring resource location.
|
void |
setScripts(String... scriptNames)
Set the scripts to be loaded by the script engine (library or user provided).
|
void |
setSharedEngine(Boolean sharedEngine)
When set to
false , use thread-local ScriptEngine instances instead
of one single shared instance. |
public ScriptTemplateConfigurer()
public ScriptTemplateConfigurer(String engineName)
public void setEngine(@Nullable ScriptEngine engine)
ScriptEngine
to use by the view.
If renderFunction
is specified, the script engine must implement Invocable
.
You must define engine
or engineName
, not both.
When the sharedEngine
flag is set to false
, you should not specify
the script engine with this setter, but with setEngineName(String)
or setEngineSupplier(Supplier)
since it implies multiple lazy
instantiations of the script engine.
setEngineName(String)
,
setEngineSupplier(Supplier)
@Nullable public ScriptEngine getEngine()
ScriptTemplateConfig
ScriptEngine
to use by the views.getEngine
in interface ScriptTemplateConfig
public void setEngineSupplier(@Nullable Supplier<ScriptEngine> engineSupplier)
ScriptEngine
supplier to use by the view, usually used with
setSharedEngine(Boolean)
set to false
.
If renderFunction
is specified, the script engine must implement Invocable
.
You must either define engineSupplier
, engine
or engineName
.setEngine(ScriptEngine)
,
setEngineName(String)
@Nullable public Supplier<ScriptEngine> getEngineSupplier()
ScriptTemplateConfig
ScriptEngine
.getEngineSupplier
in interface ScriptTemplateConfig
public void setEngineName(@Nullable String engineName)
ScriptEngine
.
If renderFunction
is specified, the script engine must implement Invocable
.
You must define engine
or engineName
, not both.@Nullable public String getEngineName()
ScriptTemplateConfig
ScriptEngine
.getEngineName
in interface ScriptTemplateConfig
public void setSharedEngine(@Nullable Boolean sharedEngine)
false
, use thread-local ScriptEngine
instances instead
of one single shared instance. This flag should be set to false
for those
using non thread-safe script engines with templating libraries not designed for
concurrency, like Handlebars or React running on Nashorn for example.
When this flag is set to false
, the script engine must be specified using
setEngineName(String)
or setEngineSupplier(Supplier)
.
Using setEngine(ScriptEngine)
is not possible because multiple instances
of the script engine need to be created lazily (one per thread).
@Nullable public Boolean isSharedEngine()
ScriptTemplateConfig
isSharedEngine
in interface ScriptTemplateConfig
public void setScripts(@Nullable String... scriptNames)
resourceLoaderPath
default value is "classpath:", you can load easily
any script available on the classpath.
For example, in order to use a JavaScript library available as a WebJars dependency
and a custom "render.js" file, you should call
configurer.setScripts("/META-INF/resources/webjars/library/version/library.js",
"com/myproject/script/render.js");
.
setResourceLoaderPath(java.lang.String)
,
WebJars@Nullable public String[] getScripts()
ScriptTemplateConfig
getScripts
in interface ScriptTemplateConfig
public void setRenderObject(@Nullable String renderObject)
Mustache.render()
, renderObject
should be set to "Mustache"
and renderFunction
to "render"
.@Nullable public String getRenderObject()
ScriptTemplateConfig
getRenderObject
in interface ScriptTemplateConfig
public void setRenderFunction(@Nullable String renderFunction)
ScriptEngine.eval(String, Bindings)
.
This function will be called with the following parameters:
String template
: the template contentMap model
: the view modelRenderingContext context
: the rendering context (since 5.0)RenderingContext
@Nullable public String getRenderFunction()
ScriptTemplateConfig
ScriptEngine.eval(String, Bindings)
.getRenderFunction
in interface ScriptTemplateConfig
public void setContentType(@Nullable String contentType)
text/html
by default).@Nullable public String getContentType()
getContentType
in interface ScriptTemplateConfig
public void setCharset(@Nullable Charset charset)
UTF-8
by default).@Nullable public Charset getCharset()
ScriptTemplateConfig
getCharset
in interface ScriptTemplateConfig
public void setResourceLoaderPath(@Nullable String resourceLoaderPath)
ResourceLoader
.
Relative paths are allowed when running in an ApplicationContext.
Default is "classpath:".
@Nullable public String getResourceLoaderPath()
ScriptTemplateConfig
getResourceLoaderPath
in interface ScriptTemplateConfig