在尝试为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
复制/粘贴到所有可能的位置:
一切都没有成功......
另外请注意在异常中缺少t
,不是拼写错误,看起来堆栈中的某些东西处理不好路径
答案 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());
}
});
});
文件夹