小编典典

我是不是误解了JavaBean方法的命名约定,还是很奇怪?

java

我的代码中发生了一些不可思议的事情。这是Bean的代码段:

public List<HelpContentsFrag> getCFrags()
{
    return cFrags;
}

public void setCFrags(List<HelpContentsFrag> frags)
{
    cFrags = frags;
}

这是我的查看代码(标记文件)中的代码段

cFrags:[${topic.cFrags}]

其中topic是Bean类型的对象。

这是错误:

javax.el.PropertyNotFoundException: Property 'cFrags' not found on type com.company.beans.BeanClass

还有一件事要考虑。蚀产生的二传手之间有细微的差别。显然,它也不喜欢cFrags这个名字。字段名称为cFrags,每隔一个设置器,我就会获得与该字段同名的参数,并使用约定对其进行设置this.fieldName = fieldName。您会注意到,月食不符合此设置器的要求。

仅供参考:当我将吸气剂更改为getContentsFrag()并引用它时,所有这些都很好用.contentsFrag


阅读 212

收藏
2020-11-01

共1个答案

小编典典

我相信你想要:

cFrags:[${topic.CFrags}]

带有大写的C。请参阅JavaBeans
Spec

8.8推断名称的大写。

当我们使用设计模式来推断属性或事件名称时,我们需要决定遵循哪些规则来大写所推断的名称。如果我们从普通的MixedCase样式Java名称的中间提取名称,则该名称默认情况下将以大写字母开头。Java程序员习惯于使普通标识符以小写字母开头。审阅者的大力投入使我们确信,对于属性和事件名称,我们应该遵循相同的常规规则。

因此,当我们从现有Java名称的中间提取属性或事件名称时,通常会将第一个字符转换为小写。但是,为了支持偶尔使用所有大写名称,我们会检查名称的前两个字符是否均为大写,是否保留为大写。例如

“ FooBah”变成“ fooBah”
“ Z”变成“ z”
“ URL”变成“ URL”

我们提供了Introspector.decapitalize方法,该方法实现了此转换规则。

2020-11-01