2013-11-05 61 views
0

我是JSP新手。我正在編寫一個名爲success.jsp的JSP頁面。我在success.jsp中創建了一個String[]數組。在JSP頁面中的作用域

<% 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不同?

+0

好吧,我是「那傢伙」。這裏是:不要在JSP中編寫java'scriptlet'。不要。這是一個可怕的想法。這是一個壞主意,在一些Web框架中有插件來強制你不這樣做。 – GreyBeardedGeek

回答

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>