2011-10-17 2 views
16

include에서 JSTL for-loop에 설정된 일부 JSTL 변수에 액세스하려고합니다.c : forEach 변수를 jsp : include에 포함

예 : I 변수 '항목'을 참조 할 수 있도록하려는 helper.jsp 내부

<c:forEach items="${cart.entries}" var="entry"> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

. 그것은 계속 '비어있는'것으로 계속오고 있습니다. 아마 당신이 정상적인 설정 변수로 할 수있는 것처럼 forEach 변수에 범위를 추가하는 방법이있을 것이라고 생각했습니다.

아이디어가 있으십니까?

답변

25

답변 : 작업을 시작하기 위해이 작업을 수행해야했습니다.

<c:forEach items="${cart.entries}" var="entry"> 
<c:set var="entryFC" value="${entry}" scope="request"></c:set> 
<jsp:include page="helper.jsp"></jsp:include> 
</c:forEach> 

그럼 내 포함에서 entryFC를 참조했습니다. 그다지 우아하지는 않지만 그 일은 너무 힘들어.

+11

나는 더 우아한 방법을 찾고 있었지만 결국 그렇게했습니다. 그건 그렇고 변수의 이름을 바꿀 필요는 없습니다 :''잘 작동하고 덜 혼란 스럽습니다. . – Dmitri

0

나는이 질문에 대해 답변하는 것이 매우 늦다는 것을 알고 있지만,이 상황에 처해 있고 대답을 찾는 사람들에게 도움이 될 수 있습니다.

<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에 삽입된다는 점에서 다르게 작동합니다. 기본적으로 요청 된 페이지를 동일한 컨테이너에 별도의 렌더링 요청으로 제출하고 파일 내용이 아닌 결과를 가져 와서 수행합니다. 이 요청은 태그를 포함하는 페이지와 동일한 페이지 정보를 사용하지 않는 자체 컨텍스트에서 수행됩니다. 이는 특히 포함 된 컨텐츠에 상충되는 변수가있는 경우에 특히 유용 할 수 있습니다.