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 . |
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 |
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 the setEngineName(String)
one (since it implies multiple lazy instantiations of the script engine).
setEngineName(String)
@Nullable public ScriptEngine getEngine()
ScriptTemplateConfig
ScriptEngine
to use by the views.getEngine
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.setEngine(ScriptEngine)
@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.
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 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