여러 테이블의 값을 조회할 때 뷰 외에도 사용할 수 있는 방법이 뭐가 있을까 하다가
여러 시행착오를 겪어보았다.
여기에서 foreach 를 이중으로 써보니 jsp에서 출력이 제곱으로 되는 문제가 있었고,
아직 jstl 문법에서 var와 item 정도 밖에 몰랐던 수준에서는 방법이 보이지 않아
이런저런 뻘짓 끝에 varStatus 라는 문법을 알게 되었다.
(실은 문서도 제대로 찾아보지 않고 학원에서 배운대로만 활용해보려 했던 잘못이기도 하다. 심화해서 작업을 해볼 생각이었으면 조금 장벽에 부딪혔을 때 바로 문서를 찾아보자고 다시 다짐해본다...)
foreach 문에 varStatus를 이용한다면 다음과 같이 이용할 수 있다.
<c:foreach items="${배열이름}" var="별칭" varStatus="상태용 변수">
// 반복해서 표시할 내용 혹은 반복할 구문
</c:foreach>
// 배열이름에는 jsp 등에서 setAttribute 등으로 전달한 배열도 활용할 수 있다.
// 별칭은 반복 구문 안에서 사용할 변수의 이름을 별칭으로 지정해주는 형태이다.
/**
상태용 변수라는 말은 다양한 방식으로 활용할 수 있다.
varStatus 뒤에 올 수 있는 값으로는 foreach에 사용가능한 대부분의 값이 올 수 있다.
예를 들어 current index count begin end step 등을 말한다.
표현 방식은
${상태용 변수.index}
이런 식으로 활용이 가능하다. 조금만 더 응용해보자면
한번의 반복문 안에서 같은 인덱스를 공유하는 다른 배열을 처리할 수도 있다.
ArrayList의 형식을 빌려서 세팅된 배열이 2개 이상 있다고 가정하고
아래의 코드를 만들어볼 생각이다.
*/
// 예시 구문, 모든 배열은 ArrayList의 형식
// 게시물에 대한 정보를 담은 boardList
// 멤버들의 값이 담긴 membersList,
// 게시물에 대한 덧글들의 관계정보가 담긴 memberReplyList가 세션에 전달되었다고 치자.
<table>
<c:foreach items="${boardList}" var="boardVO" varStatus="status">
// 게시물의 번호와
// 그 번호 게시물에 작성자 해당하는 유저의 닉네임
// 사람들이 그 번호 게시물에 대해 달은 전체 덧글의 수를
// 같은 인덱스를 공유하며 한번의 반복으로 표현할 수 있습니다.
<tr>
<td>${boardVO.boardNumber}</td>
<td>
${membersList[status.index].nickname}
${memberReplyList[status.index].count}
</td>
</tr>
</c:foreach>
</table>
'코딩이야기 > JAVA' 카테고리의 다른 글
[JAVA] 프로그래머스 코딩테스트 연습 문제 풀이 - 진료 순서 정하기 (0) | 2022.11.07 |
---|---|
[JAVA] 프로그래머스 연속된 수의 합 코딩테스트 연습 문제 풀이 / 팩토리얼과 배열의 응용문제 (0) | 2022.11.04 |
[JAVA] 프로그래머스 문제 풀이 다음에 올 숫자 / 등비수열, 등차수열 판별 (0) | 2022.11.04 |
[JAVA] 사진 파일과 음악 파일의 FileNotFoundException (0) | 2022.11.01 |
[JAVA] java.lang.NullPointerException 에러 (0) | 2022.10.31 |