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() |
Modifier and Type | Method and Description |
---|---|
Charset |
getCharset()
Return the charset used to read script and template files.
|
ScriptEngine |
getEngine()
Return the
ScriptEngine to use by the views. |
String |
getEngineName()
Return the engine name that will be used to instantiate the
ScriptEngine . |
String |
getRenderFunction()
Return the render function name (mandatory).
|
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 |
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 |
setRenderFunction(String renderFunction)
Set the render function name (mandatory).
|
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 void setEngine(ScriptEngine engine)
ScriptEngine
to use by the view.
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)
public ScriptEngine getEngine()
ScriptTemplateConfig
ScriptEngine
to use by the views.getEngine
in interface ScriptTemplateConfig
public void setEngineName(String engineName)
ScriptEngine
.
The script engine must implement Invocable
.
You must define engine
or engineName
, not both.setEngine(ScriptEngine)
public String getEngineName()
ScriptTemplateConfig
ScriptEngine
.getEngineName
in interface ScriptTemplateConfig
public void setSharedEngine(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).
public Boolean isSharedEngine()
ScriptTemplateConfig
isSharedEngine
in interface ScriptTemplateConfig
public void setScripts(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)
,
WebJarspublic String[] getScripts()
ScriptTemplateConfig
getScripts
in interface ScriptTemplateConfig
public void setRenderObject(String renderObject)
Mustache.render()
, renderObject
should be set to "Mustache"
and renderFunction
to "render"
.public String getRenderObject()
ScriptTemplateConfig
getRenderObject
in interface ScriptTemplateConfig
public void setRenderFunction(String renderFunction)
template
: the view template content (String)model
: the view model (Map)public String getRenderFunction()
ScriptTemplateConfig
getRenderFunction
in interface ScriptTemplateConfig
public void setCharset(Charset charset)
UTF-8
by default).public Charset getCharset()
ScriptTemplateConfig
getCharset
in interface ScriptTemplateConfig
public void setResourceLoaderPath(String resourceLoaderPath)
ResourceLoader
.
Relative paths are allowed when running in an ApplicationContext.
Default is "classpath:".
public String getResourceLoaderPath()
ScriptTemplateConfig
getResourceLoaderPath
in interface ScriptTemplateConfig