Как язык выражений Java разрешает логические атрибуты? (в JSF 1.2) - PullRequest
13 голосов
/ 13 июля 2010

Итак, мы все знаем, что #{someBean.value} попытается получить содержимое некоторого свойства на someBean, которое называется value.Это будет искать getValue().Однако что, если это свойство равно boolean?Это будет искать isValue().То, что он не будет искать, это hasValue().

Это заставило меня задуматься, что именно он делает?

Учебное пособие по Java EE 5 - язык унифицированных выражений относится к PageContext.FindAttribute().PageContext отправляет вас на JSPContext.Никто из них не объясняет правила, которым они следуют, чтобы определить имя метода, который они ищут.

Также довольно легко найти документацию, в которой говорится, что имена методов должны начинаться с get.Однако я знаю, что isValue() работает.

Может кто-нибудь указать мне документацию, где это записано.Я не ищу учебники или примеры, которые я ищу для справки.

Ответы [ 2 ]

17 голосов
/ 13 июля 2010

Это документально подтверждено в спецификациях JavaBeans и EL.

Чтобы взять в качестве примера свойство boolean, оно описано в главе 8.3.2 спецификации JavaBeans:

8.3.2 Логические свойства

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

public boolean is<PropertyName>();

Этот метод «is <<em> PropertyName >» может быть предоставлен вместо метода «get <<em> PropertyName >» или может быть предоставлен в дополнение кметод «get <<em> PropertyName >».

В любом случае, если метод «is <<em> PropertyName >» присутствует для логического свойства, мы будем использоватьметод «is <<em> PropertyName >» для чтения значения свойства.

Пример логического свойства может быть следующим:

    public boolean isMarsupial();
    public void setMarsupial(boolean m);

Итак, #{bean.marsupial}ожидает именно такую ​​пару геттер / сеттер.

И в главе 1.18.5 спецификации EL:

1.18.5 Corece A - Boolean

  • Если A равно null или "", вернуть false
  • В противном случае, если A равно Boolean, вернуть A
  • В противном случае, если A является String и Boolean.valueOf(A) не выдает исключение, верните его

См. Также:

5 голосов
/ 13 июля 2010

В основном то, что вы заявили, это все, что нужно сделать. EL ожидает, что объект будет следовать стандартным стандартам Java-бобов. Эти 2 должны помочь:

...