Tôi biết rất muộn để trả lời cho câu hỏi này, nhưng có thể hữu ích cho những người bị kẹt trong tình huống này và tìm kiếm câu trả lời.
Câu trả lời của tôi sẽ hoạt động nếu bạn không bị ràng buộc chặt chẽ khi sử dụng thẻ <jsp: include>
để bao gồm jsp. Thay vào đó, bạn có thể sử dụng <%@include file="/WEB-INF/views/path-to-jsp.jsp" %>
để nhập một jsp khác trong trang và trang này có thể sử dụng biến vòng lặp thẻ <c:forEach>
của bạn.
Ví dụ:
<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>
Nó đang làm việc vì <%@include file="" %>
thẻ sẽ bơm các nội dung của tập tin có tên vào JSP chứa thẻ, như thể nó đã được sao chép và dán. Điều này được thực hiện trước khi nội dung của tệp được bao gồm được phân tích cú pháp, thay vào đó phân tích cú pháp nó trong khi JSP chứa được phân tích cú pháp. Điều này giống với chỉ thị C#include, nơi trong quá trình xử lý trước, tệp được bao gồm được "dán" vào vị trí trước khi tệp được biên dịch. Sau khi nội dung được bao gồm, nó được đánh giá, tất cả trong cùng một bối cảnh, và do đó với cùng một truy cập và ràng buộc mã được bao gồm sẽ có nếu các nội dung được gõ vào vị trí đơn giản.
Trong khi đó, <jsp:include page=""/>
thẻ hoạt động khác nhau ở chỗ kết quả hiển thị trang được chỉ định được đưa vào JSP chứa tại điểm của thẻ. Điều này được thực hiện bằng cách chủ yếu gửi trang được yêu cầu đến cùng một vùng chứa, dưới dạng yêu cầu hiển thị riêng lẻ và lấy kết quả chứ không phải nội dung của tệp. Yêu cầu này được thực hiện theo ngữ cảnh riêng của nó, có nghĩa là yêu cầu này không sử dụng thông tin trang giống như trang chứa thẻ. Điều này có thể hữu ích, đặc biệt là nếu nội dung được bao gồm có thể có các biến xung đột.
Nguồn
2017-06-15 11:04:20
Tôi đang tìm kiếm một cách thanh lịch hơn, nhưng cuối cùng lại làm điều này. Nhân tiện, bạn không cần phải đổi tên biến: ' ' hoạt động tốt và có thể ít gây nhầm lẫn . –
Dmitri