2013-02-13 69 views
0

您能否向我解释行为?我正在servlet中设置一个请求属性并在JSP中读取它。JSP - 范围属性名称与EL隐式对象相同

1)分派器servlet代码:

request.setAttribute("someName", someObject); 

当然,我可以在JSP它读作${someName}

2)但是,如果我设置的属性名称相同一些EL隐式对象的名称,如

request.setAttribute("requestScope", someObject); 

然后我必须将它读为${requestScope.requestScope}

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

回答

1

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

你似乎认为这是相反的,即首先是属性,然后是隐式对象。这不是真的。否则它会完全破坏隐式EL对象的工作。