EL如何在不知道其类的情况下使用对象的方法和字段

时间:2015-02-05 15:05:54

标签: java jsp el

当我们在jsp中执行类似

的操作时,我无法理解它是如何工作的
${someObject.doMethod()}

我不明白的是我们没有在这里定义对象的类,但jasper编译它并且这段代码有效。 我的意思是我们不写

${SomeClass someObject.doMethod()}

请解释它是如何运作的。

1 个答案:

答案 0 :(得分:1)

EL在后台使用reflection API。因此,在您的示例中,someObject首先取自当前上下文(您可以将其视为Map),然后进一步解析表达式的其余部分。例如,如果它以()结尾,则在对象上搜索具有给定名称的方法。如果它类似${someObject.someField},则会查找公共getter,名为getSomeField()等。

@Prisoner的好评 - 需要注意的一件重要事情是EL在运行时进行评估。因此,如果您在某个表达式中使用的对象或方法实际上不存在,则不会获得任何编译器错误/警告。