Микронавт / рули помощники
Я задаюсь вопросом, где (или как) я должен объявить помощников для руля в моем проекте микронавигации?
Я попробовал следующий подход:
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
Handlebars handlebars = new Handlebars();
handlebars.registerHelpers(HelperSource.class);
}
}
без эффекта, конечно. Как мне успешно зарегистрировать помощников Handlebars в приложении Micronaut?
1 ответ
В текущем выпуске 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
способ правильно его инициализировать.