Микронавт / рули помощники - PullRequest
0 голосов
/ 07 ноября 2018

Мне интересно, где (или как) я должен объявить помощников для руля в моем проекте микронавтов?

Я попробовал следующий подход:

public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class);
        Handlebars handlebars = new Handlebars();
        handlebars.registerHelpers(HelperSource.class);
    }
}

без эффекта, конечно. Как мне успешно зарегистрировать помощников Handlebars в приложении Micronaut?

1 Ответ

0 голосов
/ 07 ноября 2018

Нет конфигурации для регистрации помощников 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. Запустите приложение и посмотрите результаты

enter image description here

@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();
        }
    }
}

Он имеет несколько преимуществ по сравнению с предыдущим решением:

  1. Вам не нужно создавать его в пакете io.micronaut.views.handlebars.
  2. Вам не нужно получать компонент в методе main, чтобы правильно его инициализировать.
...