【问题标题】:How to print a list of objects in a Velocity template?如何在 Velocity 模板中打印对象列表?
【发布时间】:2013-02-07 11:14:20
【问题描述】:

这是一个非常基本的问题,我很确定我做错了什么或做出了一些假设。来了。

我正在编写一个使用 Velocity 模板系统的 Jira 插件。我有一个 ResultRow 对象列表,其中 ResultRow 是一个具有单个成员变量的类:字符串键:

public class ResultRow {
  public String key;
}

我有这些 ResultRows 的列表:

List<ResultRow> rows = new ArrayList<ResultRow>();

ResultRow row = new ResultRow();
row.key = "foo";

rows.add(foo);

Map<String, Object> velocityParams = new HashMap<String, Object>();
velocityParams.put("rows", rows);

return descriptor.getHtml("view", velocityParams);

我正在尝试使用以下内容在模板中列出这些行:

#foreach ($row in $rows)
  <tr><td>$row.key</td></tr>
#end

我希望输出是:foo.令人发指的是,模板系统只是打印文字字符串“$row.key”而不是 key 的内容。为了验证“$row”确实是一个对象,我使用了模板:

#foreach ($row in $rows)
  <tr><td>$row</td></tr>
#end

结果如预期:com.domain.jira.ResultRow@7933f2c6。

我想我可能缺少课程的一些要求。是否需要以某种特殊方式定义以向 Velocity 建议某些成员可在模板中使用? Jira 是否使用了一些仅适用于某些对象的特殊版本的 Velocity?

【问题讨论】:

    标签: jira velocity


    【解决方案1】:

    Velocity 不公开字段,只公开方法。有一些方法可以改变:

    • 您可以创建自己的允许访问公共字段的 Uberspect 类。

    • 您可以使用 Velocity 的 FieldMethodizer 的修改版本来包装实例,该版本允许访问非静态字段。

    • 您可以在上下文中添加和使用“工具”类的实例,例如 VelocityTool 的 ClassTool 的子类。

    【讨论】:

      【解决方案2】:

      我想答案是你不能做我想做的事。您可以调用成员方法,但不能访问成员变量,这意味着您需要将 getter 添加到您的类中。 (我可以发誓我试过了。嗯。)

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多