我想知道在我的micronaut项目中应该在哪里(或如何)声明车把的助手?
我尝试了以下方法:
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
Handlebars handlebars = new Handlebars();
handlebars.registerHelpers(HelperSource.class);
}
}
当然没有效果。如何在Micronaut应用程序中成功注册手把助手?
答案 0 :(得分:2)
在当前的Micronaut 1.0 GA版本中,没有注册手把助手的配置。但是,您可以采用一种简单的解决方法来克服此限制。为了使助手注册成为可能,您必须访问io.micronaut.views.handlebars.HandlebarsViewsRenderer
类及其内部属性handlebars
。好消息是,该属性的作用域为protected
-这意味着我们可以在源代码的同一包中创建另一个bean,并且可以注入HandlebarsViewsRenderer
并访问HandlebarsViewsRenderer.handlebars
字段。可以访问此字段,我们可以执行handlebars.registerHelpers(...)
方法。
您只需执行以下步骤:
compile "com.github.jknack:handlebars:4.1.0"
将其添加到编译范围很重要,因为运行时范围不允许您访问HandlebarsViewsRenderer.handlebars
对象。
io.micronaut.views.handlebars.HandlebarsCustomConfig
类src / main / java / io / micronaut / views / handlebars / 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}}
的单个帮助器。
HandlebarsCustomConfig
bean 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不会创建它的实例,并且我们的助手注册也不会发生。
src / main / resources / views / home.hbs
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>Now is {{now}}</p>
</body>
</html>
@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
方法获取bean即可对其进行正确初始化。