在JSP中仅为特定的属性王使用表达式语言时出现异常错误 - 请检查此项

Dj.*_*Dj. 3 java jsp el

我有这种不寻常的情况:

我有一个registrationVO,它有很少的属性和getter setter.例如citybCity使用他们的getter方法getCity()getBCity()

在JSP中我试图使用scriplets显示这些属性的值, <%=registrationVO.getCity()%>并且< %=registrationVO.getBCity()%>,它工作正常.但我用表达式语言替换了相同的内容, ${registrationVO.city}并且${registrationVO.bCity} 我在registrationVO中找不到属性"bCity"的错误.我再次使用scriplet进行bCity,我得到了输出.

我观察它是因为命名惯例."如果财产的第二个字符是大写字母,我们就不能使用表达语言".我试过很多差异,这就是我发现的.

请检查这个场景,我不知道我的结论是对还是错.

谢谢,DJ

Bal*_*usC 7

如果getter方法的属性名称以至少两个大写字符开头,那么您还需要在EL属性名称中使用所有这些大写字符.在您的特定情况下,您需要替换它${registrationVO.BCity}.这在Javabeans规范的第8.8章中有详细说明.这是本章的摘录(强调我的):

8.8推断名称的大写.

当我们使用设计模式来推断属性或事件名称时,我们需要确定要使用推断名称大写的规则.如果我们从普通的mixedCase样式Java名称的中间提取名称,那么默认情况下,名称将以大写字母开头.

Java程序员习惯于使用小写字母开头.严谨的审稿人输入使我们确信我们应该遵循同样的传统规则来处理财产和事件名称.

因此,当我们从现有Java名称的中间提取属性或事件名称时,我们通常会将第一个字符转换为小写.但是为了支持偶尔使用所有大写名称,我们检查名称的前两个字符是否都是大写,如果是这样,请不要管它.所以,例如,

  • "FooBah"成为"fooBah"
  • "Z"变为"z"
  • "网址"变为"网址"

我们提供了一种Introspector.decapitalize实现此转换规则的方法.

也就是说,我宁愿将它们重命名为更合理的东西.也许birthCity(如果我猜对了),这样你就可以很好地使用了${registrationVO.birthCity}.