handlebars

handlebars

Logic-less and semantic templates via Handlebars.java.

exports

dependency

<dependency>
  <groupId>org.jooby</groupId>
  <artifactId>jooby-hbs</artifactId>
  <version>1.1.3</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.