Velocity Templates变量和方法。为什么* this *语法有效,* *语法不起作用?

时间:2014-03-11 17:55:21

标签: java velocity pojo

我是Spring MVC和Velocity Templates的新手,但是我将它们用于一个项目并且有一些问题。基本上,我使用一些遗留代码作为我的模板,但遗留代码中的语法对我不起作用,我不知道为什么。我们的团队有一个名为AdminData的公共类,它看起来像:

    public class AdminData { 
            private long property1; 

            public void setProperty1 (long property1) { 
                    this.property1 = property1; 
            } 

            public long getProperty1() { 
                    return property1; 
            } 

和Java代码看起来像这样:

    ModelAndView model = new ModelAndView("view"); 
    AdminData data = new AdminData(); 

    ... // set some properties of data

    model.addObject("data", data); 
    return model; 

然后在我们的Velocity模板中,我们引用数据对象的属性,如下所示:

    ${data.property1}

并在页面上正确显示该值。然后我们有另一个名为AdminFeatures的类,它看起来像:

    public class AdminFeatures { 
            private boolean property2; 

            public void setProperty2(boolean property2) { 
                    this.property2 = property2; 
            } 

            public boolean getProperty2() { 
                    return property2; 
            } 

与我们用于AdminData的模型和视图基本相同的Java代码。我遇到的问题是,当我尝试以相同的方式引用AdminFeatures中的property2时:

    ${data.property2}

我无法打印出变量的值。但是,如果我使用语法:

    $data.getProperty2()         // ... or ${data.getProperty2()}

然后我可以打印属性的值。这是否与Java中布尔值与布尔值之间的差异有关?或者property1是一个很长的属性property2是一个布尔值?

谢谢。

1 个答案:

答案 0 :(得分:0)

是因为property2是一个布尔值。布尔类型的getter / setter的标准方法约定是 isProperty 和setProperty。

所以你的AdminFeatures类应该是:

public class AdminFeatures {         private boolean property2;

    public void setProperty2(boolean property2) { 
            this.property2 = property2; 
    } 

    public boolean isProperty2() { 
            return property2; 
    }