Необычная ошибка при использовании языка выражений в JSP только для определенного короля свойств - отметьте это - PullRequest
3 голосов
/ 05 февраля 2010

У меня есть такой необычный сценарий:

У меня есть регистрация VO с несколькими свойствами и установщиками геттеров для этого. Например, city или bCity с их методами получения getCity() и getBCity()

В JSP я пытался отобразить значение этих свойств с помощью скриптов, <%=registrationVO.getCity()%> и <<code>%=registrationVO.getBCity()%>, отлично работает. Но я заменил то же самое с языком выражения, ${registrationVO.city} и ${registrationVO.bCity} Я получил ошибку, сказав, что свойство "bCity" не найдено при регистрации. я снова использовал сценарий для bCity, я получил вывод.

Я заметил, что это из-за соглашения об именах. «Если вторым символом свойства является заглавная буква, мы не можем использовать язык выражений». Я пробовал много разных названий, вот что я узнал.

Пожалуйста, проверьте этот сценарий, я не знаю, правильный ли мой вывод или нет.

Спасибо, DJ

1 Ответ

7 голосов
/ 05 февраля 2010

Если имя свойства метода get начинается как минимум с двух заглавных символов, то вам также необходимо использовать все эти заглавные буквы в имени свойства EL. В вашем конкретном случае вам необходимо заменить его на ${registrationVO.BCity}. Это указано в главе 8.8 спецификации Javabeans . Вот выдержка из этой главы (выделено мной):

8.8 Использование заглавных букв в названии.

Когда мы используем шаблоны проектирования для вывода имени свойства или события, нам необходимо решить, какие правила следовать за заглавной буквы предполагаемого имени. Если мы извлекаем имя из середины нормального Имя Java в смешанном стиле, тогда имя по умолчанию будет начинаться с заглавной буквы.

Java-программисты привыкли, что нормальные идентификаторы начинаются со строчных букв. Активный вклад рецензента убедил нас, что мы должны следовать этому же обычному правилу для имен свойств и событий.

Таким образом, когда мы извлекаем имя свойства или события из середины существующего имени Java, мы обычно преобразуйте первый символ в нижний регистр. Однако, чтобы поддержать случайное использование всех имена в верхнем регистре, мы проверяем, являются ли первые два символа имени заглавными, и если так что оставь это в покое . Так, например,

  • «FooBah» становится «FooBah»
  • «Z» становится «z»
  • «URL» становится «URL»

Мы предоставляем метод Introspector.decapitalize, который реализует это правило преобразования.

Тем не менее, я бы лучше переименовал их в нечто более разумное. Может быть birthCity (если я угадаю это правильно), так что вы можете просто использовать ${registrationVO.birthCity}.

...