개발/JSP

forEach를 이용해서 JSTL로 출력하기

신매력 2012. 8. 10. 10:44

JAVA에서 VIEW단으로 리턴한 데이터 객체를 JSTL 문법을 써서 쓰는 방법.



JAVA에서 보낸 객체가 이런형태로 생겼다고 하자.


[

[{key1 = lion, key2 = cat}], 

[{key1 = apple, key2 = melon}]

]


자바에선 List<List<HashMap<String, String>>>  이런 곳에 담겨있던 데이터이다.

복잡한가..?ㅋㅋ




key1, key2에 있는 값을 출력해보자.



1. 맨 바깥 리스트 벗기기


java에서 modelData 란 이름으로 저 데이터를 넣었다.


<c:forEach items="${modelData}" var="list">

${list} <br/>

</c:forEach>



포이치 한번 돌린 ${list}엔 뭐가 들어있을까?

바깥 리스트 껍데기가 하나 벗겨진


[{key1 = lion, key2 = cat}] 

[{key1 = apple, key2 = melon}]

이것이 출력된다.



2. 안쪽 리스트 벗기기 


그다음 바깥 리스트들을 빼야한다.

포이치를 한번 더 돌린다.


<c:forEach items="${modelData}" var="list">

<c:forEach items="${list}" var="map">

${map} <br/>

</c:forEach>

</c:forEach>


이젠 아래와 같이 맵들만 남는다.

{key1 = lion, key2 = cat} 

{key1 = apple, key2 = melon}



3. key1, key2의 값을 출력하기


<c:forEach items="${modelData}" var="list">

<c:forEach items="${list}" var="map">

${map[key1]} <br/>

</c:forEach>

</c:forEach>



${map[key1]} 또는 ${map.key1} 하면 그 키의 값이 출력될 것이다.




4. 두번째 리스트의 key2만 출력하기


melon이 나오도록 해보자.


그냥 ${modelData[0][1][key2]} 이렇게 해도 그만이긴 한데

나는 인덱스 개념을 알려주고 싶다. ㅋㅋㅋㅋ




 - JSTL에서의 인덱스 사용방법부터!!!


<c:forEach items="${modelData}" var="list" varStatus="status">

${status.count}<br/>

</c:forEach>


이렇게 하면 포가 돌때마다 카운트가 증가한다.

만약 5번 돌았다면,

1

2

3

4

5 가 출력됐을것이다.


${status.count} 말고도 다른것도 있다.

${status.index} 라고 쓰면 0부터 시작이 된다.  (count는 1부터 시작)


5번 돌았다면

0

1

2

3

4 가 출력된다.


그 이외에도 아래와 같은것이 있다.

여기 잘 나와있음 http://www.ibm.com/developerworks/kr/library/j-jstl0318/


난 count랑 index를 자주 쓰게 되는듯.


속성GetterDescription
currentgetCurrent()현재 반복 라운드 아이템
indexgetIndex()현재 반복 라운드의 제로 기반(zero-based) 인덱스
countgetCount()현재 반복 라운드의 1 기반(one-based) 인덱스
firstisFirst()현재 라운드가 반복을 통한 첫 번째 패스임을 나타내는 플래그
lastisLast()반복현재 라운드가 반복을 통한 마지막 패스임을 나타내는 플래그
begingetBegin()begin 애트리뷰트의 값
endgetEnd()end 애트리뷰트의 값
stepgetStep()step 애트리뷰트의 값




다시 본론으로 들어가서 ,

melon이 나오도록 해보자.



<c:forEach items="${modelData}" var="list" varStatus="status">

<c:if test="${status.index eq 1}>

${list[status.index][key2]} <br/>

</c:if>

</c:forEach>



이렇게 배열의 인덱스로 응용해서 사용이 가능하다!