(背景:我一直在用的Java bean工作某处大约18年和关闭;我一直在Freemarker的工作了两个星期:-))Freemarker是否支持MethodDescriptors?
我有一个手式调试BeanInfo
它代表不遵循“普通”(但显然是任意的)方法命名方式的类的属性。
从语义上讲,对于名为x
的Java bean属性,您可以在该类上调用一个名为x()
的方法。
因此,我的BeanInfo
实现(Freemarker正在查找并加载)实现此模式。精细。
有问题的类实际上有一个名为target()
方法,该方法返回一个特定的对象(姑且称之为Target
这里),并且通过一个PropertyDescriptor
他的名字是target
,其readMethod
是法表示。精细。
在我Freemarker模板,如果我这样做:
theObject.target
...我得到一个错误,指出target
,是一个有效的方法,而不是一个性质,提示我PropertyDescriptor
,虽然在技术上容易找到,没有被咨询。如果我将其改为:
theObject.target()
...然后一切正常。换句话说,这个方法似乎被Freemarker视为一种方法 - 它就像Freemarker没有“通过”PropertyDescriptor
,否则它会告诉它这实际上是Java bean属性的“读取方法” 。
我试图编辑我BeanInfo
返回的MethodDescriptors
空列表,心想也许这就是问题所在:如果你从一个特定的方法在BeanInfo
返回null
那么Introspector
确实为那件事低水平反思。并且null
是默认值。因此,如果您从BeanInfo#getMethodDescriptors()
返回null
,Introspector
可能会找到您班级中的所有公共方法,并为他们创建MethodDescriptor
。
无论如何,所以我回来的MethodDescriptor
秒的空单,希望我能迫使Freemarker的到不是“看” target
作为一种方法,但作为一个Java bean的属性(“通过落”我BeanInfo
的PropertyDescriptor
为上文提到的)。这没有奏效。
总之,我怎样才能让我的:
someObject.target
...咒语访问我的属性描述符,而不是target()
方法?
看起来像['MethodAppearanceFineTuner'](http://freemarker.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html)类可能会帮助我在这里。 –