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

时间:2010-02-05 13:19:05

标签: java jsp el

我有这种不寻常的情况:

我有一个registrationVO,它有很少的属性和getter setter。 例如citybCity及其getter方法getCity()getBCity()

在JSP中,我尝试使用scriplets显示这些属性的值, <%=registrationVO.getCity()%>和&lt; %=registrationVO.getBCity()%>,工作正常。 但我用表达语言替换了相同的, ${registrationVO.city}${registrationVO.bCity} 我得到一个错误,说在注册中没有找到属性“bCity”。 我再次使用了一个用于bCity的scriplet,我得到了输出。

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

请检查这种情况,我不知道我的结论是对还是错。

谢谢, DJ

1 个答案:

答案 0 :(得分:7)

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

  

8.8推断名称的大写。

     

当我们使用设计模式推断属性或事件名称时,我们需要确定哪些规则   跟随大写推断名称。如果我们从正常的中间提取名称   如果是mixedCase样式的Java名称,则默认情况下名称将以大写字母开头。

     

Java程序员习惯于使用小写字母开头。   强有力的评论者输入使我们确信我们应该遵循同样的传统规则   对于财产和事件名称。

     

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

     
      
  • “FooBah”变成“fooBah”
  •   
  • “Z”变为“z”
  •   
  • “网址”变为“网址”
  •   
     

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

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