java.lang.Object
gg.jte.TemplateEngine
jte is a simple, yet powerful template engine for Java.
All jte templates are compiled to Java class files, meaning jte adds essentially zero overhead to your application.
jte is designed to introduce as few new keywords as possible and builds upon existing Java features,
so that it is very easy to reason about what a template does.
Read more at the official documentation
Read more at the official documentation
-
Method Summary
Modifier and TypeMethodDescriptionvoidcleanAll()Cleans the directory containing the compiled template classes.voidClears all cached templates.static TemplateEnginecreate(CodeResolver codeResolver, ContentType contentType) Creates a new template engine.static TemplateEnginecreate(CodeResolver codeResolver, Path classDirectory, ContentType contentType) Creates a new template engine.static TemplateEnginecreate(CodeResolver codeResolver, Path classDirectory, ContentType contentType, ClassLoader parentClassLoader) Creates a new template engine.static TemplateEnginecreate(CodeResolver codeResolver, Path classDirectory, ContentType contentType, ClassLoader parentClassLoader, String packageName) Creates a new template engine.static TemplateEnginecreatePrecompiled(ContentType contentType) Creates a new template engine.static TemplateEnginecreatePrecompiled(Path classDirectory, ContentType contentType) Creates a new template engine.static TemplateEnginecreatePrecompiled(Path classDirectory, ContentType contentType, ClassLoader parentClassLoader) Creates a new template engine.static TemplateEnginecreatePrecompiled(Path classDirectory, ContentType contentType, ClassLoader parentClassLoader, String packageName) Creates a new template engine.Generates all template classes in the sources directory, to the compiled template classes directory.getParamInfo(String name) Obtain parameter information about a specific template.getTemplatesUsing(String name) booleanhasTemplate(String name) Compiles all templates located in the sources directory, to the compiled template classes directory.precompileAll(List<String> classPath) Compiles all templates located in the sources directory, to the compiled template classes directory.voidprepareForRendering(String name) Prepares the template with the given name for renderingreloadPrecompiled(TemplateEngine precompiler) Useful, if this engine is in precompiled mode (probably production) but you still want to be able to apply a hotfix without deployment.reloadPrecompiled(Path classDirectory) Useful, if this engine is in precompiled mode (probably production) but you still want to be able to apply a hotfix without deployment.voidrender(String name, Object param, TemplateOutput output) Renders the template with the given name.voidRenders the template with the given name.voidsetBinaryStaticContent(boolean binaryStaticContent) Setting, that UTF-8 encodes all static template parts at compile time.voidsetClassPath(List<String> classPath) The class path used for compiling templates.voidsetCompileArgs(String... compileArgs) Sets additional compiler arguments for jte templates.voidOptional - Extensions this template engine should load.voidsetHtmlCommentsPreserved(boolean htmlCommentsPreserved) By default, jte omits all HTML/CSS/JS comments, when compiling withContentType.Html.voidsetHtmlInterceptor(HtmlInterceptor htmlInterceptor) Interceptor that is called during template rendering when one of the configured htmlTags is rendered.voidsetHtmlPolicy(HtmlPolicy htmlPolicy) Policy that checks the parsed HTML at compile time.voidsetHtmlTags(String... htmlTags) Intercepts the given html tags during template compilation and calls the configured htmlInterceptor during template rendering.voidsetKotlinCompileArgs(String... compileArgs) Sets additional compiler arguments for kte templates.voidsetProjectNamespace(String projectNamespace) "group/artifact" of the project using jte.voidsetTargetResourceDirectory(Path targetResourceDirectory) Directory in which to generate non-java files (resources).voidsetTrimControlStructures(boolean value) Trims control structures, resulting in prettier output.
-
Method Details
-
create
Creates a new template engine. All templates are compiled to Java class files on demand. A JDK is required. Every template has its own class loader. This is recommended when running templates on your developer machine.- Parameters:
codeResolver- to lookup jte templatescontentType- the content type of all templates this engine manages- Returns:
- a fresh TemplateEngine instance
-
create
public static TemplateEngine create(CodeResolver codeResolver, Path classDirectory, ContentType contentType) Creates a new template engine. All templates are compiled to Java class files on demand. A JDK is required. Every template has its own class loader. This is recommended when running templates on your developer machine.- Parameters:
codeResolver- to lookup jte templatesclassDirectory- where template class files are compiled tocontentType- the content type of all templates this engine manages- Returns:
- a fresh TemplateEngine instance
-
create
public static TemplateEngine create(CodeResolver codeResolver, Path classDirectory, ContentType contentType, ClassLoader parentClassLoader) Creates a new template engine. All templates are compiled to Java class files on demand. A JDK is required. Every template has its own class loader. This is recommended when running templates on your developer machine.- Parameters:
codeResolver- to lookup jte templatesclassDirectory- where template class files are compiled tocontentType- the content type of all templates this engine managesparentClassLoader- the parent classloader to use, or null to use the application class loader as parent- Returns:
- a fresh TemplateEngine instance
-
create
public static TemplateEngine create(CodeResolver codeResolver, Path classDirectory, ContentType contentType, ClassLoader parentClassLoader, String packageName) Creates a new template engine. All templates are compiled to Java class files on demand. A JDK is required. Every template has its own class loader. This is recommended when running templates on your developer machine.- Parameters:
codeResolver- to lookup jte templatesclassDirectory- where template class files are compiled tocontentType- the content type of all templates this engine managesparentClassLoader- the parent classloader to use, or null to use the application class loader as parentpackageName- the package name, where template classes are generated to- Returns:
- a fresh TemplateEngine instance
-
createPrecompiled
Creates a new template engine. All templates must have been precompiled to Java class files already. The template engine will load them from the specified classDirectory. No JDK is required. All templates share one class loader with each other. This is recommended when running templates in production. How to precompile templates.- Parameters:
classDirectory- where template class files are locatedcontentType- the content type of all templates this engine manages- Returns:
- a fresh TemplateEngine instance
-
createPrecompiled
Creates a new template engine. All templates must have been precompiled to Java class files already. The template engine will load them via the application class loader. This means all template classes must be bundled in you application JAR file. No JDK is required. This is recommended when running templates in production. How to precompile templates.- Parameters:
contentType- the content type of all templates this engine manages- Returns:
- a fresh TemplateEngine instance
-
createPrecompiled
public static TemplateEngine createPrecompiled(Path classDirectory, ContentType contentType, ClassLoader parentClassLoader) Creates a new template engine. All templates must have been precompiled to Java class files already. The template engine will load them from the specified classDirectory. No JDK is required. All templates share one class loader with each other. This is recommended when running templates in production. How to precompile templates.- Parameters:
classDirectory- where template class files are locatedcontentType- the content type of all templates this engine managesparentClassLoader- the parent classloader to use, or null to use the application class loader as parent (only has an effect if classDirectory is not null)- Returns:
- a fresh TemplateEngine instance
-
createPrecompiled
public static TemplateEngine createPrecompiled(Path classDirectory, ContentType contentType, ClassLoader parentClassLoader, String packageName) Creates a new template engine. All templates must have been precompiled to Java class files already. The template engine will load them from the specified classDirectory. No JDK is required. All templates share one class loader with each other. This is recommended when running templates in production. How to precompile templates.- Parameters:
classDirectory- where template class files are locatedcontentType- the content type of all templates this engine managesparentClassLoader- the parent classloader to use, or null to use the application class loader as parent (only has an effect if classDirectory is not null)packageName- the package name, where template classes are generated to- Returns:
- a fresh TemplateEngine instance
-
render
Renders the template with the given name. It is preferred to use this method, if all your templates have exactly one parameter.- Parameters:
name- the template name relative to the specified root directory, for instance "pages/welcome.jte".param- the param passed to the template.output- any implementation ofTemplateOutput, where the template will be written to.- Throws:
TemplateException- in case the template failed to render, containing information where the error happened.
-
render
public void render(String name, Map<String, Object> params, TemplateOutput output) throws TemplateExceptionRenders the template with the given name. Parameters in the params map are mapped to the corresponding parameters in the template. Template parameters with a default value don't have to be provided in the map.- Parameters:
name- the template name relative to the specified root directory, for instance "pages/welcome.jte".params- the parameters passed to the template as key value pairs.output- any implementation ofTemplateOutput, where the template will be written to.- Throws:
TemplateException- in case the template failed to render, containing information where the error happened.
-
hasTemplate
-
getTemplatesUsing
-
getParamInfo
Obtain parameter information about a specific template.- Parameters:
name- the template name relative to the specified root directory, for instance "my/example.jte".- Returns:
- a map containing all template parameters names and their classes
- Throws:
TemplateException- in case parameter information is not available (jte classes must be compiled with -parameters compiler flag.)
-
prepareForRendering
Prepares the template with the given name for rendering- Parameters:
name- the template name relative to the specified root directory, for instance "pages/welcome.jte".
-
cleanAll
public void cleanAll()Cleans the directory containing the compiled template classes. -
generateAll
Generates all template classes in the sources directory, to the compiled template classes directory. This only generates .java files, not .class files.- Returns:
- list of .java template files that were generated
-
precompileAll
Compiles all templates located in the sources directory, to the compiled template classes directory.- Returns:
- list of .java template files that were compiled
-
precompileAll
Compiles all templates located in the sources directory, to the compiled template classes directory.- Parameters:
classPath- additional class path arguments for the Java compiler. See alsosetClassPath(List)- Returns:
- list of .java template files that were compiled
-
clearCache
public void clearCache()Clears all cached templates. Future invocations of render methods will result in reloaded template classes. -
reloadPrecompiled
Useful, if this engine is in precompiled mode (probably production) but you still want to be able to apply a hotfix without deployment. This template engine will be entirely unaffected by this call. Instead, a fresh template engine will be created. When this call succeeds, you can safely switch the template engine reference to the new instance. The old instance including all old templates should then be subject to garbage collection.
This only works if you're running on the JDK and if templates have their own classloader.- Parameters:
precompiler- a template engine that is configured exactly as you usually would precompile your templates.- Returns:
- a fresh template engine with a warmed up cache.
- Throws:
TemplateException- in case there was a compilation error, in this case you should keep the current engine running!
-
reloadPrecompiled
Useful, if this engine is in precompiled mode (probably production) but you still want to be able to apply a hotfix without deployment. This template engine will be entirely unaffected by this call. Instead, a fresh template engine will be created. When this call succeeds, you can safely switch the template engine reference to the new instance. The old instance including all old templates should then be subject to garbage collection.
Basically you could recompile all templates on your build server, upload them to your production server and call this method afterwards.
This only works if templates have their own classloader.- Parameters:
classDirectory- the class directory to load the new templates from.- Returns:
- a fresh template engine with a warmed up cache.
- Throws:
TemplateException- in case there was an error during class loading, in this case you should keep the current engine running!
-
setCompileArgs
Sets additional compiler arguments for jte templates.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
compileArgs- for instance templateEngine.setCompileArgs("--enable-preview", "--release", "" + Runtime.version().feature());
-
setKotlinCompileArgs
Sets additional compiler arguments for kte templates.
This is a template compilation setting and has no effect when loading precompiled templates. Currently, only -jvm-target is supported.- Parameters:
compileArgs- for instance templateEngine.setCompileArgs("-jvm-target", "17");
-
setTrimControlStructures
public void setTrimControlStructures(boolean value) Trims control structures, resulting in prettier output.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
value- true, to enable
-
setHtmlPolicy
Policy that checks the parsed HTML at compile time.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
htmlPolicy- the policy- Throws:
NullPointerException- if policy is null
-
setHtmlTags
Intercepts the given html tags during template compilation and calls the configured htmlInterceptor during template rendering.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
htmlTags- tags to be intercepted, for instance setHtmlTags("form", "input");
-
setHtmlInterceptor
Interceptor that is called during template rendering when one of the configured htmlTags is rendered. This allows to integrate existing frameworks into jte.- Parameters:
htmlInterceptor- the interceptor
-
setHtmlCommentsPreserved
public void setHtmlCommentsPreserved(boolean htmlCommentsPreserved) By default, jte omits all HTML/CSS/JS comments, when compiling withContentType.Html. If you don't want this behavior, you can disable it here.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
htmlCommentsPreserved- true, to preserve HTML comments in templates
-
setBinaryStaticContent
public void setBinaryStaticContent(boolean binaryStaticContent) Setting, that UTF-8 encodes all static template parts at compile time. Only makes sense if you use a binary output, likeUtf8ByteOutput.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
binaryStaticContent- true, to pre-generate UTF-8 encoded byte arrays for all static template parts
-
setClassPath
The class path used for compiling templates.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
classPath- list of elements on the class path
-
setTargetResourceDirectory
Directory in which to generate non-java files (resources). Typically, set by plugin rather than end user. Optional - if null, resources will not be generated
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
targetResourceDirectory- directory to generate resources in
-
setProjectNamespace
"group/artifact" of the project using jte. Typically, set by plugin rather than end user. If null, the compiler will make one up.
This is a template compilation setting and has no effect when loading precompiled templates.- Parameters:
projectNamespace- "groupId/artifactId"
-
setExtensions
Optional - Extensions this template engine should load. Currently, the following extensions exist:- gg.jte.models.generator.ModelExtension
- gg.jte.nativeimage.NativeResourcesExtension
templateEngine.setExtensions(Map.of("gg.jte.models.generator.ModelExtension", Map.of()));
-