JSP页面中的范围

时间:2013-11-05 03:56:21

标签: jsp el scriptlet scopes

我是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页面中,我怀疑是

  1. 默认情况下,为什么“scriptlet”中的String[]数组不是在任何JSP范围(即页面,请求,应用程序)中创建的?因此,我在请求范围中明确设置了该数组。

  2. 默认情况下,为什么变量x是在“页面范围?”中创建的。

    情况1与情况2的不同之处是什么?

1 个答案:

答案 0 :(得分:0)

  1. 是的,scriplet中的数组在jsp页面的编译版本中创建 only ,并且在任何jsp范围内都不可用。因此,您需要在所需范围内获取阵列,然后就可以像在EL中一样使用它。

  2. 循环变量 x 由JSTL for循环创建,因此它已经在pageScope中被抓取。两种情况之间的区别在于,在一种情况下,变量由jsp scriplet创建,在另一种情况下,它由JSTL标记创建。

  3. 你的循环正在运行,但我认为你并不需要指定循环变量 x 的范围,所以你可以简化这种方式:

    <c:forEach var="x" items="${a}">
        <c:out value="${x}"><br/>
    <c:forEach>
    

    或者,甚至更好:

    <c:forEach var="x" items="${a}">
        ${x}<br/>
    <c:forEach>