JSP - Scope属性名称与EL隐式对象相同

时间:2013-02-13 17:29:46

标签: jsp el

你能告诉我这个行为吗?我在servlet中设置了一个request属性,并在JSP中读取它。

1)Dispatcher servlet代码:

request.setAttribute("someName", someObject);

当然,我可以在JSP中以${someName}

的形式阅读它

2)但是如果我将属性名称设置为与某些EL隐式对象名称相同,例如

request.setAttribute("requestScope", someObject);

然后我必须把它读作${requestScope.requestScope}

为什么容器能够直接映射#1中的属性,但是如果属性名称本身是EL隐式对象名称,我们需要嵌套引用,如${requestScope.requestScope}

1 个答案:

答案 0 :(得分:1)

EL将首先检查给定的变量名是否是保留(隐式)变量名之一,然后按照规范使用它。如果不是,就像在${someName}中那样,那么EL将分别在页面,请求,会话和应用范围内自动搜索具有该名称的属性。

您似乎期望这种方式相反,即首先是属性,然后是隐式对象。这不是真的。否则它将彻底破坏隐式EL对象的工作。