我知道現在回答這個問題的時間已經很晚了,但可以幫助那些陷入這種情況並尋找答案的人。
如果您不是沒有緊緊地使用<jsp: include>
標籤來包含jsp,那麼我的答案將起作用。相反,您可以使用<%@include file="/WEB-INF/views/path-to-jsp.jsp" %>
在頁面中導入另一個jsp,並且此頁面可以使用您的<c:forEach>
標記循環變量。
例如。
<c:forEach items="${users}" var="user">
<%@include file="/WEB-INF/views/path-to-jsp.jsp" %> <!-- here ${user} can be use in importing jsp file. -->
</c:forEach>
這是工作,因爲<%@include file="" %>
標籤將注入命名的文件中包含標籤內容到JSP,就好像是複製和粘貼。這是在解析包含文件的內容之前完成的,而不是在解析包含的JSP時對其進行解析。這更類似於C#include指令,其中在對包含文件進行預處理期間,在編譯文件之前將其「粘貼」到位。在內容被包含之後,它被評估,全部在相同的上下文中,因此如果內容被簡單地鍵入就位,則包含的代碼將具有相同的訪問和約束。
然而,<jsp:include page=""/>
標記的行爲不同,因爲呈現指定頁面的結果被注入包含在標記點處的JSP中。這是通過實質上將所請求的頁面提交給同一個容器來完成的,作爲單獨的呈現請求,並且取得結果,而不是文件的內容。此請求在其自己的上下文中完成,這意味着它不會使用與包含該標記的頁面相同的頁面信息。例如,這可能很方便,尤其是如果包含的內容可能有衝突的變量。
我四處尋找更優雅的方式,但最終這樣做。順便說一下,你不需要重命名變量:' '工作得很好,很可能不那麼令人困惑。 –
Dmitri