EL автоматически конвертирует / преобразует тип? Как на самом деле работает $ {a.name}? - PullRequest
4 голосов
/ 21 сентября 2011

У меня есть переменная, объявленная как тип Object a, которая на самом деле ссылается на экземпляр типа A.

. В EL я могу напрямую использовать следующее выражение для печати свойства name типа A:

${a.name}

Как это работает?

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

EL использует отражение под капотами, обычно через javax.beans.Introspector API .

Это то, что он примерно делает под прикрытием на ${a.name}.

// EL will breakdown the expression.
String base = "a";
String property = "name";

// Then EL will find the object and getter and invoke it.
Object object = pageContext.findAttribute(base);
String getter = "get" + property.substring(0, 1).toUpperCase() + property.substring(1);
Method method = object.getClass().getMethod(getter, new Class[0]);
Object result = method.invoke(object);

// Now EL will print it (only when not null).
out.println(result);

Он не преобразует / не преобразует тип.

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

3 голосов
/ 21 сентября 2011

Это потому, что name является свойством объекта a, и, вероятно, объект также является JavaBean (не путать с Enterprise JavaBean).

См. здесь для документации по языку Expression и здесь для краткого учебника.

...