EL 将优先考虑哪个属性:范围较大的属性还是设置较晚的属性?

Which attribute will be given preference by EL: the one in bigger scope or one which was set later?

我在其中一个 JSP 中有以下 JSTL 标记:

<c:forEach items="${customerList}" var="cust" varStatus="current">

customerList 已在 2 个不同的 JAVA 文件中设置为会话和请求属性:

JAVA 首先调用文件 1,它具有以下代码:

WebUtils.setSessionAttribute(request, "customerList", VAR1);

之后 JAVA 文件 2 被调用,其中包含:

request.setAttribute("customerList", VAR2);

然后,调用 JSP,它引用 customerList,如最初所述。现在我的问题是,JSP 是否会将 customerList 值作为 VAR1 或 VAR2?

我认为它将采用 VAR1,因为它的设置范围更大,即 'session' 与 'request' 相比;即使稍后设置了请求属性。

你怎么看?

提前致谢!!

理论上,这两个值将一直存在,直到您在同一会话下处理同一请求。

因为尽管您使用相同的密钥,即 'customerList' 它的范围不同(会话和请求),这意味着在内部创建了 2 个不同的变量(不完全是,但为清楚起见假设 :))。

所以这取决于你,你叫哪一个。 如果您调用 WebUtil.getSessionAttribute 那么 VAR1 将是输出,如果是 request.getAttribute() VAR2 将是输出。

不过我还没有测试过。