0

次のような速度テンプレートを用意します

#foreach($item in $items)
<tr>
    <td>$item.getClass() $item.getKey()</td>
    <td>$item.summary $item.Summary $item.getSummary()</td>
</tr>
#end

Velocity のマニュアルによると、$item フィールドに getter -"getSummary()" としてアクセスできます。

ReportRow アイテムの ArrayList を変数「items」に渡し、速度でアイテムの概要を描画するようにします。ReportRow は単純な POJO クラスです。

public class ReportRow {
    private String key;
    private String summary;

    public ReportRow(String key, String summary) {
        this.key = key;
        this.summary = summary;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    private String getSummary() {
        return summary;
    }

    private void setSummary(String summary) {
        this.summary = summary;
    }

    @Override
    public String toString() {
        return key + " " + summary;
    }
}

Velocity がテキストをレンダリングすると、次のようになります。

  • 最初の列: "class ...ReportRow MyKey" - OK - $item にはオブジェクトが含まれており、その Key フィールドにアクセスできます。
  • 2 列目: "$item.summary $item.Summary $item.getSummary()" -なぜ?

アイテムをコンテキストに入れるとき、すべてのフィールドは null ではありません。

私は何を逃したのですか?

4

1 に答える 1

1

ゲッターはprivate. 明らかなセキュリティ上の理由から、Velocity はテンプレートからプライベート メソッドを呼び出すことを許可していません。それを機能させるためのメソッドpublicを作成するだけです。

于 2013-07-25T18:42:56.867 に答える