handlebars
Logic-less and semantic templates via Handlebars.java.
exports
Handlebars
- ViewEngine
dependency
<dependency>
<groupId>org.jooby</groupId>
<artifactId>jooby-hbs</artifactId>
<version>1.6.6</version>
</dependency>
usage
{
use(new Hbs());
get("/", req -> Results.html("index").put("model", new MyModel());
}
public/index.html:
{{model}}
Templates are loaded from the root of the classpath: /
and must end with: .html
file extension.
request locals
A template engine has access to request locals
(a.k.a attributes). Here is an example:
{
use(new Hbs());
get("*", req -> {
req.set("foo", bar);
});
}
Then from template:
{{foo}}
helpers
Simple/basic helpers:
{
use(new Hbs().doWith(hbs -> {
hbs.registerHelper("myhelper", (ctx, options) -> {
return ...;
});
hbs.registerHelpers(Helpers.class);
});
}
Now, if the helper depends on a service and require injection:
{
use(new Hbs().with(HelperSource.class));
}
The HelperSource
class will be injected by Guice.
template loader
Templates are loaded from the root of classpath and must end with .html
. You can change the default template location and extensions too:
{
use(new Hbs("/", ".hbs"));
}
cache
Cache is OFF when env=dev
(useful for template reloading), otherwise is ON.
The cache is backed by Guava and the default cache will expire after 100
entries.
If 100
entries is not enough or you need a more advanced cache setting, just set the hbs.cache
option:
hbs.cache = "expireAfterWrite=1h"
See CacheBuilderSpec for more detailed expressions.