본문 바로가기
Stack Overflow/스프링

[스프링]Don't know how to iterate over supplied "items" in <forEach> 오류 원인 및 해결방법

by Lich King 2022. 3. 25.

일반적으로는 리스트 타입이 아닌데 JSTL에서 forEach를 사용해서 발생하는 오류이다.
읽어봐도 forEach 내의 item을 어떻게 iterate를 할수 있는지 알수 없다고 써있으니까 말이다.

간단하게 이 문제면 해결하기가 쉽다.
근데 다른 이 오류는 다른 문제에서도 나타날 수 있다.

예를들면..
다음과 같은 경우 소스를 보면 된다.

 

<c:forEach items="${list}" var="list">
	<c:choose>
		<c:when test="${fn:length(list) == 1}">
			<strong>${list.content }</strong>
		</c:when>
		<c:otherwise>
			 <!-- 나머지 -->
		</c:otherwise>
	</c:choose>
</c:forEach>

forEach 내에 when을 사용하여 list의 전체 length 를 구하는 것이 소스코드의 의도이다.
근데 이렇게 소스를 작성하면 

Don't know how to iterate over supplied "items" in <forEach>


오류를 볼 수 있다.
forEach에서 list를 사용하여 item값을 추출했는데 length list를 사용하니
iterator가 작동하는 상태에서 컴파일러가 소스를 이해하지 못하는 일이 생긴 것이다.
이런 경우 다음과 같은 방법으로 작성을 해줘야 한다.

 

<c:choose>
	<c:when test="${fn:length(list) == 1}">
		<c:forEach items="${list}" var="list">
			<strong>${list.content }</strong>
		</c:forEach>
	</c:when>
	<c:otherwise>
		 <!-- 나머지 -->
	</c:otherwise>
</c:choose>

forEach 함수 내에서 item을 쓰기 전에 먼저 전체 값을 뽑아준다.
그러면 오류가 해결된다.

댓글