我发现velocity的一个问题,很尴尬。。。

Xingjian_Xu 发布于 2011/05/15 11:21
阅读 715
收藏 1

假设有一个model

public class A{

public String value;

}

然后把A的一个实例a渲染到VM模板里:

$a.value

Velocity居然会认为a没有value这个属性,看了下Velocity的代码,它根本不会去尝试直接从a里拿到value这个public field,而是尝试通过各种getter来获取。。。。没有getter,就认为没这个属性。。。。

~~~~~~~~~~~~~

我知道使用public 来修饰属性的利弊,关于这点就不讨论了

加载中
0
CodeFurtur
CodeFurtur

Property Lookup Rules 
As was mentioned earlier, properties often refer to methods of the parent object. Velocity is quite clever when figuring out which method corresponds to a requested property. It tries out different alternatives based on several established naming conventions. The exact lookup sequence depends on whether or not the property name starts with an upper-case letter. For lower-case names, such as$customer.address, the sequence is

  1. getaddress()
  2. getAddress()
  3. get("address")
  4. isAddress()
For upper-case property names like   $customer.Address , it is slightly different:
  1. getAddress()
  2. getaddress()
  3. get("Address")
  4. isAddress()
0
Xingjian_Xu
Xingjian_Xu

回楼上,这个文档我看过了

不觉得velocity这么做很尴尬么,有public的属性,却不去识别,velocity的意思就是你丫必须写getter/setter,这是否欠妥啊

0
jobell
jobell

呵呵,这是javabean的规范,struts同样也是这样的标准。所以这不是velocity模板的问题。

0
Xingjian_Xu
Xingjian_Xu

我是被playframework蛊惑的

一篇java 带代码,getter setter占了一半,而我又不想用什么jvm agent,什么字节码加强,以及那些动态jvm语言

羡慕c#里的处理方法

是不是没救了

0
李永波
李永波

引用来自#5楼“XuWolsan”的帖子

我是被playframework蛊惑的

一篇java 带代码,getter setter占了一半,而我又不想用什么jvm agent,什么字节码加强,以及那些动态jvm语言

羡慕c#里的处理方法

是不是没救了

 public class A{

public String value;

}

这个应该不算是属性吧  在C# 中也要有  get{}  set{}

大约是这样写吧

 public class A{

 protected String _value;  

 public  string value
{
get { return _ value ; }
set { _ value = value; }
}
 }

0
Xingjian_Xu
Xingjian_Xu

引用来自#6楼“李永波”的帖子

引用来自#5楼“XuWolsan”的帖子

我是被playframework蛊惑的

一篇java 带代码,getter setter占了一半,而我又不想用什么jvm agent,什么字节码加强,以及那些动态jvm语言

羡慕c#里的处理方法

是不是没救了

 public class A{

public String value;

}

这个应该不算是属性吧  在C# 中也要有  get{}  set{}

大约是这样写吧

 public class A{

 protected String _value;  

 public  string value
{
get { return _ value ; }
set { _ value = value; }
}
 }

看着舒服点而已

0
benbenming
benbenming

呵呵。java就是这个样子的。习惯就好了。

0
未央
未央
是唉,java的规范还得遵守哦
0
g
goldfish0222
不能匿名发表啊!
0
loyal
loyal
我晕...不知道什么叫快速编程么?不知道什么叫约定优先么?
返回顶部
顶部