Jira 如何在Velocity模板中打印对象列表?

Jira 如何在Velocity模板中打印对象列表?,jira,velocity,Jira,Velocity,这是一个非常基本的问题,我很确定我做错了什么,或者做了一些假设。来吧 我正在编写一个Jira插件,它使用Velocity模板系统。我有一个ResultRow对象列表,其中ResultRow是一个具有单个成员变量的类:String key: public class ResultRow { public String key; } 我有这些结果视图的列表: List<ResultRow> rows = new ArrayList<ResultRow>(); Resu

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

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

public class ResultRow {
  public String key;
}
我有这些结果视图的列表:

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);
List rows=new ArrayList();
ResultRow行=新ResultRow();
row.key=“foo”;
行。添加(foo);
Map velocityParams=新HashMap();
velocityParams.put(“行”,行);
返回描述符.getHtml(“视图”,velocityParams);
我尝试在模板中列出这些行,并使用以下内容:

#foreach ($row in $rows)
  <tr><td>$row.key</td></tr>
#end
#foreach($rows中的行)
$row.key
#结束
我希望输出为:foo。令人恼火的是,模板系统只是打印文本字符串“$row.key”,而不是key的内容。为了验证“$row”确实是一个对象,我使用了以下模板:

#foreach ($row in $rows)
  <tr><td>$row</td></tr>
#end
#foreach($rows中的行)
美元行
#结束
结果如预期:com.domain.jira。ResultRow@7933f2c6.


我想我可能错过了这门课的一些要求。是否需要以某种特殊的方式定义它,以向Velocity建议某些成员在模板中可用?吉拉是否使用了一些只适用于某些物体的特殊时髦版本的速度?

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

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

速度不暴露场,只暴露方法。有几种方法可以改变这一点:

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

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

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


Velocity不公开字段,只公开方法。有几种方法可以改变这一点:

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

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

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