0

私はJSPが初めてです。という名前の 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[]、「スクリプトレット」の配列がどの JSP スコープ (つまり、ページ、リクエスト、アプリケーション) でも作成されないのはなぜですか? したがって、その配列を明示的にリクエスト スコープに設定しました。

  2. デフォルトでは、変数xが「ページ スコープ」に作成されるのはなぜですか?

    状況 1 と状況 2 の違いは何ですか?

4

1 に答える 1

0
  1. はい、スクリプトレットの配列はコンパイルされたバージョンの jsp ページでのみ作成され、どの jsp スコープでも使用できません。したがって、目的のスコープで配列を取得する必要があり、EL 内で使用することができます。

  2. ループ変数xは JSTL の for ループによって作成されるため、すでに pageScope で取得されています。2 つの状況の違いは、変数が 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 に答える