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

标签 java jsp el

当我们在 jsp 中做类似的事情时,我无法理解它是如何工作的

${someObject.doMethod()}

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

${SomeClass someObject.doMethod()}

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

最佳答案

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

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

关于java - EL 如何在不知道对象类的情况下使用对象的方法和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347328/

相关文章:

jsf - 已淘汰的Facelets代码仍会调用#{bean.action()}之类的EL表达式,并在#{bean.action}上导致javax.el.PropertyNotFoundException

java - JSF 和 tomcat5 - 无渲染响应

java - 无法让 hibernate 通过级联删除已从一对多关系中删除的子实例

Java - 为什么不调用 ArithmeticException 类的子类?

jsp - 如何在多部分发布请求中传递参数

java - "css"在Spring MVC元素中如何使用 "jsp"?

java - FPS 上限仍然会导致闪烁

java - 允许父级处理鼠标事件

jsp - 使用JSP文档(JSPX)有条件地在元素上设置属性

jsp - 如何使用 JSP/EL/JSTL 检查集合是否包含项目