Vert.x文件根目录与Handlebars模板位置

时间:2017-08-13 19:44:48

标签: java vert.x handlebars.java

在尝试为Vertx的HandleBars模板引擎访问模板时,我一直在努力解决NoSuchFileException问题。 我个人认为以太网Vertx文件系统root不一致或者我遗漏了一些东西,代码片段如下:

    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复制/粘贴到所有可能的位置:

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

一切都没有成功......

另外请注意在异常中缺少t,不是拼写错误,看起来堆栈中的某些东西处理不好路径

1 个答案:

答案 0 :(得分:0)

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

MAXIMUM_LENGTH

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

这会在TemplateEngine engine = HandlebarsTemplateEngine.create(); TemplateHandler handler = TemplateHandler.create(engine); router.get("/*").handler(handler);

下呈现任何模板

如果你仍然想出于某种原因自己打电话给.render,你可以这样做:

resources/templates

同样,这将在router.get("/").handler(ctx -> { engine.render(ctx, "templates/index.hbs", res -> { if (res.succeeded()) { ctx.response().end(res.result()); } }); }); 文件夹

下查找您的模板