在Scriplet的pageContext中设置属性在外面不可用?

时间:2017-12-11 06:13:52

标签: java jsp scriptlet

给出JSP页面的一部分:

<%! int index = 0; %>

<% int index = 1;
List<String> strings = new ArrayList<String> () ;
strings.add(0, "Zero");
strings.add(1, "One");
strings.add(2, "Two");
pageContext.setAttribute("strings", strings);
index = 2;
%>
${strings[index]}

输出是什么?

我认为输出将是&#34; One&#34; 但输出不会打印任何内容。

根据我的理解,pageContext中设置的变量也应该在外面可用。所以我试着跟着

${pageContext.getAttribute(strings[index])}

仍然没有输出。请有人指导我。

1 个答案:

答案 0 :(得分:0)

表达式语言(EL)查找scopes并使用它们,例如页面,请求,会话或应用程序范围。

您可以在上面的页面范围(它是默认范围)中设置数组,但不要设置index。所以它不适用于EL。您还需要在任何范围内设置索引变量。

int index = 1;
pageContext.setAttribute("strings", strings);
pageContext.setAttribute("index", index);
index = 2;

在这种情况下,您应该看到One,因为设置页面范围的索引是1

您也可以使用JSTL尝试:

<c:set var="index" scope="page" value="1"></c:set> // scope="page" already default
<c:set var="strings" value="${['Zero','One','Two']}"></c:set>
${strings[index]}