我的代码中发生了神秘的事情。这是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
时,这一切都很好。 最佳答案
我相信你想要:
cFrags:[${topic.CFrags}]
大写C。请参见JavaBeans Spec:
8.8推断名称的大写。
当我们使用设计模式来推断属性或事件名称时,我们需要决定遵循哪些规则来大写所推断的名称。如果我们从普通的MixedCase样式Java名称的中间提取名称,则该名称默认情况下将以大写字母开头。 Java程序员习惯于使普通标识符以小写字母开头。审阅者的大力投入使我们相信,对于属性和事件名称,我们应遵循相同的常规规则。
因此,当我们从现有Java名称的中间提取属性或事件名称时,通常会将第一个字符转换为小写。但是,为了支持偶尔使用所有大写字母的名称,我们检查名称的前两个字符是否均为大写,是否保留为大写。例如
“ FooBah”成为“ fooBah”
“ Z”变成“ z”
“ URL”变为“ URL”
我们提供了Introspector.decapitalize方法,该方法实现了此转换规则。