我是JSP的新手。我正在编写一个名为success.jsp
的JSP页面。
在我的success.jsp
中,我正在创建一个String[]
数组。
<% String[] s={"A","B","C"};
request.setAttribute("a",s);
%>
<br>
<c:forEach var="x" items="${a}">
<c:out value="${pageScope.x}"/><br>
</c:forEach>
在上面的JSP页面中,我怀疑是
默认情况下,为什么“scriptlet”中的String[]
数组不是在任何JSP范围(即页面,请求,应用程序)中创建的?因此,我在请求范围中明确设置了该数组。
默认情况下,为什么变量x
是在“页面范围?”中创建的。
情况1与情况2的不同之处是什么?
答案 0 :(得分:0)
是的,scriplet中的数组在jsp页面的编译版本中创建 only ,并且在任何jsp范围内都不可用。因此,您需要在所需范围内获取阵列,然后就可以像在EL中一样使用它。
循环变量 x 由JSTL for循环创建,因此它已经在pageScope中被抓取。两种情况之间的区别在于,在一种情况下,变量由jsp scriplet创建,在另一种情况下,它由JSTL标记创建。
你的循环正在运行,但我认为你并不需要指定循环变量 x 的范围,所以你可以简化这种方式:
<c:forEach var="x" items="${a}">
<c:out value="${x}"><br/>
<c:forEach>
或者,甚至更好:
<c:forEach var="x" items="${a}">
${x}<br/>
<c:forEach>