public class ScriptTemplateConfigurer extends java.lang.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(java.lang.String engineName)
Create a new ScriptTemplateConfigurer using the given engine name.
|
Modifier and Type | Method and Description |
---|---|
java.nio.charset.Charset |
getCharset()
Return the charset used to read script and template files.
|
java.lang.String |
getContentType()
Return the content type to use for the response.
|
javax.script.ScriptEngine |
getEngine()
Return the
ScriptEngine to use by the views. |
java.lang.String |
getEngineName()
Return the engine name that will be used to instantiate the
ScriptEngine . |
java.lang.String |
getRenderFunction()
Return the render function name (optional).
|
java.lang.String |
getRenderObject()
Return the object where the render function belongs (optional).
|
java.lang.String |
getResourceLoaderPath()
Return the resource loader path(s) via a Spring resource location.
|
java.lang.String[] |
getScripts()
Return the scripts to be loaded by the script engine (library or user provided).
|
java.lang.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(java.nio.charset.Charset charset)
Set the charset used to read script and template files.
|
void |
setContentType(java.lang.String contentType)
Set the content type to use for the response.
|
void |
setEngine(javax.script.ScriptEngine engine)
Set the
ScriptEngine to use by the view. |
void |
setEngineName(java.lang.String engineName)
Set the engine name that will be used to instantiate the
ScriptEngine . |
void |
setRenderFunction(java.lang.String renderFunction)
Set the render function name (optional).
|
void |
setRenderObject(java.lang.String renderObject)
Set the object where the render function belongs (optional).
|
void |
setResourceLoaderPath(java.lang.String resourceLoaderPath)
Set the resource loader path(s) via a Spring resource location.
|
void |
setScripts(java.lang.String... scriptNames)
Set the scripts to be loaded by the script engine (library or user provided).
|
void |
setSharedEngine(java.lang.Boolean sharedEngine)
When set to
false , use thread-local ScriptEngine instances instead
of one single shared instance. |
public ScriptTemplateConfigurer()
public ScriptTemplateConfigurer(java.lang.String engineName)
public void setEngine(@Nullable javax.script.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 the setEngineName(String)
one (since it implies multiple lazy instantiations of the script engine).
setEngineName(String)
@Nullable public javax.script.ScriptEngine getEngine()
ScriptTemplateConfig
ScriptEngine
to use by the views.getEngine
in interface ScriptTemplateConfig
public void setEngineName(@Nullable java.lang.String engineName)
ScriptEngine
.
If renderFunction
is specified, the script engine must implement Invocable
.
You must define engine
or engineName
, not both.setEngine(ScriptEngine)
@Nullable public java.lang.String getEngineName()
ScriptTemplateConfig
ScriptEngine
.getEngineName
in interface ScriptTemplateConfig
public void setSharedEngine(@Nullable java.lang.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.
In this case, Java 8u60 or greater is required due to
this bug.
When this flag is set to false
, the script engine must be specified using
setEngineName(String)
. Using setEngine(ScriptEngine)
is not
possible because multiple instances of the script engine need to be created lazily
(one per thread).
@Nullable public java.lang.Boolean isSharedEngine()
ScriptTemplateConfig
isSharedEngine
in interface ScriptTemplateConfig
public void setScripts(@Nullable java.lang.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 java.lang.String[] getScripts()
ScriptTemplateConfig
getScripts
in interface ScriptTemplateConfig
public void setRenderObject(@Nullable java.lang.String renderObject)
Mustache.render()
, renderObject
should be set to "Mustache"
and renderFunction
to "render"
.@Nullable public java.lang.String getRenderObject()
ScriptTemplateConfig
getRenderObject
in interface ScriptTemplateConfig
public void setRenderFunction(@Nullable java.lang.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 java.lang.String getRenderFunction()
ScriptTemplateConfig
ScriptEngine.eval(String, Bindings)
.getRenderFunction
in interface ScriptTemplateConfig
public void setContentType(@Nullable java.lang.String contentType)
text/html
by default).@Nullable public java.lang.String getContentType()
getContentType
in interface ScriptTemplateConfig
public void setCharset(@Nullable java.nio.charset.Charset charset)
UTF-8
by default).@Nullable public java.nio.charset.Charset getCharset()
ScriptTemplateConfig
getCharset
in interface ScriptTemplateConfig
public void setResourceLoaderPath(@Nullable java.lang.String resourceLoaderPath)
ResourceLoader
.
Relative paths are allowed when running in an ApplicationContext.
Default is "classpath:".
@Nullable public java.lang.String getResourceLoaderPath()
ScriptTemplateConfig
getResourceLoaderPath
in interface ScriptTemplateConfig