0

在尝试为 Vertx 获取 HandleBars 模板引擎的模板时,我一直在与 NoSuchFileException 作斗争。我个人认为 ether Vertx 文件系统根目录不一致或者我遗漏了一些东西,代码片段如下:

    String templateLocation = "templates"+File.separator+"index.hbs";
    fs = vertx.fileSystem();
    fs.exists(templateLocation, existHandler -> {
        if(existHandler.succeeded() && existHandler.result() == true){
            engine.render(context,templateLocation, renderResult -> {
                if (renderResult.succeeded()) {
                    context.request().response().putHeader("Content-Type", "text/html");
                    context.response().end(renderResult.result());
                } else {
                    context.fail(renderResult.cause());
                }
            });

首先,我通过存在确认,目录和模板文件是否存在。如果是,他们开始在同一个目录上渲染操作,我陷入:

java.nio.file.NoSuchFileException: \emplates\index.hbs

尽管存在 FileSystem 声明目录的事件。HandleBars 期望在哪里找到它的模板?我已经将文件夹复制/粘贴templates/index.hbs到所有可能的位置:

  • 项目根
  • 源/资源
  • java main 执行的目录

都没有成功...

另请注意t异常中的缺失,不是拼写错误,看起来堆栈中的某些内容无法很好地处理路径

4

1 回答 1

0

你试图以错误的方式做到这一点。Vertx 应该为您做到这一点:

TemplateEngine engine = HandlebarsTemplateEngine.create();
TemplateHandler handler = TemplateHandler.create(engine);

router.get("/*").handler(handler);

http://vertx.io/docs/vertx-web/java/#_handlebars_template_engine

这将呈现下的任何模板resources/templates

如果您出于某种原因仍想自己调用 .render ,可以这样做:

router.get("/").handler(ctx -> {
    engine.render(ctx, "templates/index.hbs", res -> {
        if (res.succeeded()) {
            ctx.response().end(res.result());
        }
    });
});

/resources同样,这将在文件夹下查找您的模板

于 2017-08-16T19:10:46.333 回答