Нет конфигурации для регистрации помощников Handlebars в текущем выпуске Micronaut 1.0 GA. Тем не менее, есть простой обходной путь, который вы можете применить, чтобы преодолеть это ограничение. Чтобы сделать регистрацию помощников возможной, вам нужно получить доступ к классу io.micronaut.views.handlebars.HandlebarsViewsRenderer
и его внутреннему свойству handlebars
. Хорошей новостью является то, что это свойство имеет область действия protected
- это означает, что мы можем создать еще один компонент в том же пакете в нашем исходном коде, и мы можем внедрить HandlebarsViewsRenderer
и получить доступ к полю HandlebarsViewsRenderer.handlebars
. Имея доступ к этому полю, мы можем выполнить метод handlebars.registerHelpers(...)
.
Вы можете просто выполнить следующие шаги:
1. Добавить зависимость Handlebars.java
compile "com.github.jknack:handlebars:4.1.0"
Важно добавить его в область компиляции, поскольку область выполнения не позволит вам получить доступ к HandlebarsViewsRenderer.handlebars
объекту.
2. Создать io.micronaut.views.handlebars.HandlebarsCustomConfig
класс
SRC / главная / Java / IO / micronaut / просмотров / рули / HandlebarsCustomConfig.java
package io.micronaut.views.handlebars;
import javax.inject.Singleton;
import java.util.Date;
@Singleton
public final class HandlebarsCustomConfig {
public HandlebarsCustomConfig(HandlebarsViewsRenderer renderer) {
renderer.handlebars.registerHelpers(new HelperSource());
}
static public class HelperSource {
public static String now() {
return new Date().toString();
}
}
}
Здесь, в этом классе, я создал простой класс HelperSource
, который предоставляет одного помощника с именем {{now}}
.
3. Нагрузка HandlebarsCustomConfig
боб
package com.github.wololock.micronaut;
import io.micronaut.context.ApplicationContext;
import io.micronaut.runtime.Micronaut;
import io.micronaut.views.handlebars.HandlebarsCustomConfig;
public class Application {
public static void main(String[] args) {
final ApplicationContext ctx = Micronaut.run(Application.class);
ctx.getBean(HandlebarsCustomConfig.class);
}
}
Этот шаг очень важен. Нам нужно загрузить bean-компонент, иначе Micronaut не создаст его экземпляр, и регистрация наших помощников не состоится.
4. Создать представление
SRC / главная / ресурсы / просмотров / home.hbs
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>Now is {{now}}</p>
</body>
</html>
5. Запустите приложение и посмотрите результаты
@Replaces
альтернатива
Вы можете использовать аннотацию Micronauts @Replaces
, чтобы заменить HandlebarsViewsRenderer
пользовательской реализацией.
import io.micronaut.context.annotation.Replaces;
import io.micronaut.core.io.scan.ClassPathResourceLoader;
import io.micronaut.views.ViewsConfiguration;
import javax.inject.Singleton;
import java.util.Date;
@Singleton
@Replaces(HandlebarsViewsRenderer.class)
public final class CustomHandlebarsViewsRenderer extends HandlebarsViewsRenderer {
public CustomHandlebarsViewsRenderer(ViewsConfiguration viewsConfiguration,
ClassPathResourceLoader resourceLoader,
HandlebarsViewsRendererConfiguration handlebarsViewsRendererConfiguration) {
super(viewsConfiguration, resourceLoader, handlebarsViewsRendererConfiguration);
this.handlebars.registerHelpers(new HelperSource());
}
static public class HelperSource {
public static String now() {
return new Date().toString();
}
}
}
Он имеет несколько преимуществ по сравнению с предыдущим решением:
- Вам не нужно создавать его в пакете
io.micronaut.views.handlebars
.
- Вам не нужно получать компонент в методе
main
, чтобы правильно его инициализировать.