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

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

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

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

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

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

2 ответа

Решение

Он официально документирован как в спецификации JavaBeans, так и в спецификации EL.

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

8.3.2 Булевы свойства

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

public boolean is<PropertyName>();

Этот метод "is< PropertyName>" может предоставляться вместо метода "get< PropertyName>", или он может предоставляться в дополнение к методу "get< PropertyName>".

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

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

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

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

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

1.18.5 Привести A к логическому

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

Смотрите также:

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

Другие вопросы по тегам