当我们在jsp中执行以下操作时,我无法理解其工作原理

${someObject.doMethod()}


我不明白的是,我们在这里没有定义对象的类,但是Jasper对其进行了编译,并且此代码有效。
我的意思是我们不写

${SomeClass someObject.doMethod()}


请解释一下它是如何工作的。

最佳答案

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

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

09-16 18:20