1

これは非常に基本的な問題であり、何か間違っているか、何らかの仮定を置いていると確信しています。ここに行きます。

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. おかしなことに、テンプレート システムは、key の内容ではなく、単にリテラル文字列 "$row.key" を出力します。「$row」が実際にオブジェクトであることを確認するために、次のテンプレートを使用しました。

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

結果は期待どおりでした: com.domain.jira.ResultRow@7933f2c6.

クラスの要件が不足している可能性があると思います。特定のメンバーがテンプレートで使用可能であることを Velocity に提案するには、特別な方法で定義する必要がありますか? Jira は、特定のオブジェクトでのみ機能する特別なファンキー バージョンの Velocity を使用していますか?

4

2 に答える 2

1

答えは、私がやろうとしていたことをあなたができないということだと思います。メンバー メソッドを呼び出すことはできますが、メンバー変数にアクセスすることはできません。つまり、クラスにゲッターを追加する必要があります。(私はそれを試したと誓ったかもしれません。ああ、まあ。)

于 2013-02-22T00:00:43.553 に答える
0

Velocityはフィールドを公開せず、メソッドのみを公開します。それを変更する方法があります:

  • パブリックフィールドへのアクセスを許可する独自のUberspectクラスを作成できます。

  • 非静的フィールドへのアクセスを提供するVelocityのFieldMethodizerの修正バージョンでインスタンスをラップできます。

  • VelocityToolのClassToolのサブクラスなど、「ツール」クラスのインスタンスをコンテキストに追加して使用できます。

于 2013-02-22T16:50:56.800 に答える