Velocity不解析foreach循环中的变量

时间:2013-05-24 09:48:12

标签: java foreach velocity

我的速度模板非常简单:

<html>
    <head>
        <title>Velocity template</title>
    </head>
    <body>      
        #foreach($p in $products)
            $p.name
        #end        
    </body>
</html>

和处理它的代码:

VelocityEngine engine = new VelocityEngine();
engine.init();
Template t = engine.getTemplate("./src/com/irbis/dms/velocity/template.html");
VelocityContext ctx = new VelocityContext();

Product p1 = new Product("fridge");
Product p2 = new Product("sofa");
Product p3 = new Product("table");
Product p4 = new Product("chair");

List<Product> products = new ArrayList<Product>();
products.add(p1);
products.add(p2);
products.add(p3);
products.add(p4);

ctx.put("products", products);
...

class Product implements Serializable {

    private String name;

    public Product() {
    }

    public Product(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

但执行后我有以下内容:

<html>
    <head>
        <title>Velocity template</title>
    </head>
    <body>      
                    $p.name
                    $p.name
                    $p.name
                    $p.name
    </body>
</html>

如果我放入上下文字符串,整数等,它工作正常。 错误在哪里?我使用的是速度1.5。

2 个答案:

答案 0 :(得分:5)

您必须将Product课程声明为public,否则您无法在模板中使用该课程。

public class Product implements Serializable {

答案 1 :(得分:0)

您的变量不可见,因为它是私有的,请使用getName()并告诉我们。