首页 > 解决方案 > HandleBars 不呈现对象变量

问题描述

尝试在车把上渲染某些对象的变量时遇到以下问题:

我已经声明了一个静态对象

public static class Banana
{
    public static String name = "PAPI PAPI";
    public static int id= 9;

    public Banana( )
    {

    }

    @Override
    public String toString() {
        return "Banana{" +
                       "id=" + id +
                       ", name='" + name + '\'' +
                       '}';
    }
}

下一步是尝试在把手上渲染我的对象变量。为此,我做了以下事情:

static void test(RoutingContext ctx)
{
    HttpServerRequest req = ctx.request();
    HttpServerResponse resp = ctx.response();
    resp.setChunked(true);

    resp.putHeader("content-type", "text/html");

    ctx.put("banana", new Banana());
    engine.render(ctx, "src/main/java/templates","/banana.hbs",
         res -> {
             if (res.succeeded()) {
                 ctx.response().end(res.result());
             } else {
                 ctx.fail(res.cause());
             }});
}

我的模板(banana.hbs)如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>{{banana.id}}</h1>
    <h1>{{banana.name}}</h1>
</body>

问题是我的 Html 是空的:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1></h1>
    <h1></h1>
</body>

有人可以帮忙吗?提前致谢,

标签: javaweb-applicationshandlebars.jsvert.xhandlebars.java

解决方案


我认为你的问题是你尝试Banana在你的上下文中放置一个非静态实例并且没有属性id并且name可以通过 getter/setter 访问。

我认为您可以尝试像这样更改您的类定义:

public class Banana {
  private String name;
  private Integer id;

  public Banana(Integer id, String name) {
      this.name = name;
      this.id = id;
  }

  // ... toString, Getters and setters ...

  static class Default() {
      private static final Banana instance = new Banana(9, "PAPI PAPI");

      public static Banana getInstance() {
          return instance;
      }
  }
}

接着 :

ctx.put("banana", Banana.Default.getInstance());

推荐阅读