1)Dispatcher servlet代码:
request.setAttribute("someName", someObject);
当然,我可以在JSP中以${someName}
2)但是如果我将属性名称设置为与某些EL隐式对象名称相同,例如
request.setAttribute("requestScope", someObject);
然后我必须把它读作${requestScope.requestScope}
!
为什么容器能够直接映射#1中的属性,但是如果属性名称本身是EL隐式对象名称,我们需要嵌套引用,如${requestScope.requestScope}
?
答案 0 :(得分:1)
EL将首先检查给定的变量名是否是保留(隐式)变量名之一,然后按照规范使用它。如果不是,就像在${someName}
中那样,那么EL将分别在页面,请求,会话和应用范围内自动搜索具有该名称的属性。
您似乎期望这种方式相反,即首先是属性,然后是隐式对象。这不是真的。否则它将彻底破坏隐式EL对象的工作。