Как язык выражений 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 должны помочь: