0

你能解释一下我的行为吗?我在 servlet 中设置请求属性并在 JSP 中读取它。

1)调度程序servlet代码:

request.setAttribute("someName", someObject);

自然地,我可以在 JSP 中将其读取为${someName}

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

request.setAttribute("requestScope", someObject);

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

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

4

1 回答 1

1

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

您似乎期望这反过来起作用,即首先是属性,然后是隐式对象。这不是真的。否则它将完全破坏隐式 EL 对象的工作。

于 2013-02-13T17:54:01.993 回答