0

我是 JSP 的新手。我正在编写一个名为success.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. 默认情况下,为什么 String[]“scriptlet”中的数组没有在任何 JSP 范围(即页面、请求、应用程序)中创建?因此,我在请求范围内明确设置了该数组。

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

    是什么让情况 1 与情况 2 不同?

4

1 回答 1

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

  2. 循环变量x是由 JSTL for 循环创建的,因此它已经在 pageScope 中被抓取。这两种情况的区别在于,在一种情况下,变量是由 jsp 脚本创建的,而在另一种情况下,它是由 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>
于 2013-11-05T18:08:35.343 回答