当我们在jsp中执行以下操作时,我无法理解其工作原理
${someObject.doMethod()}
我不明白的是,我们在这里没有定义对象的类,但是Jasper对其进行了编译,并且此代码有效。
我的意思是我们不写
${SomeClass someObject.doMethod()}
请解释一下它是如何工作的。
最佳答案
EL在后台使用reflection API。因此,在您的示例中,首先从当前上下文中提取someObject
(您可以将其视为Map
),然后进一步解析表达式的其余部分。例如,如果以()
结尾,则会在对象上搜索具有给定名称的方法。如果是类似${someObject.someField}
的内容,则将查找名为getSomeField()
的公共获取者,依此类推。
@Prisoner的一个好评论-要注意的一件事是,EL是在运行时评估的。因此,如果您在某些表达式中使用的对象或方法实际上不存在,则不会收到任何编译器错误/警告。