[movie] 다중 테이블에서 ArrayList로 넘어온 데이터를 JSP에서 처리하는 방법

myminimin·2023년 9월 11일
0

toyproject

목록 보기
7/17

이전 글

다중 테이블에서 값을 가지고와 jsp로 전달 받았으면 이제는 JSP에서 그 list로 넘어온 값 중에서 원하는 값을 원하는 곳에 배치(?) 해야한다!

👻 Details 페이지의 최종 모습


이어서

2. 해결 과정

7. movie_id=1을 찾아와!
위의 과정을 반복해 다시 5. MovieController로 돌아와 service에서 movie_id = 1에 해당하는 데이터를 "movie"라는 키로 model에 담아 jsp로 전달한다.

8-1. 이미지부터 하나하나!

여기에서 중요한 점은 요청한 movie_id1이라면 1에 해당하는 값들을 Arraylist에서 뽑아와야 한다는 것이다!

배열은 index가 0부터 시작하기 때문에 movie_id = 1에 해당하는 값은 배열의 0번째의 movie_image을 가지고 와야한다.

여기에서 중요한 점이 DB에서 이미지 이름을 가지고 와서 경로의 .jpg를 출력시켜야하는데 DB에서 데이터가 한글로 되어있으면 불러오지 못하는 오류가 있었다!

이런 식으로 테스트용 더미 데이터의 movie_image를 한글로 넣어놨는데 페이지 소스보기 에서는 분명 해당하는 값을 가지고 오는데 이상하게 출력은 되질 않아서 (JSP에서는 .jpg를 빼고 했었다)

DB의 값을 영어로 변경해주니 이미지가 잘 출력됐다.

8-2. 제목, 내용

타이틀, 내용은 이미지와 똑같이 ArrayList의 0번에서 값을 가지고 오게 했다.

8-3. 이 부분이 가장 중요하다 🤯🤯

  1. <c:forEach> 태그를 사용하여 movie라는 ArrayList에서 주연 배우의 정보를 가지고 온다. 주연 배우 정보는 actor라는 이름의 변수로 설정하고, varStatus 속성에는 현재 루프의 상태를 저장한다.

  2. ArrayList에서 주연 배우의 정보를 가지고 오는데 중복되지 않는 주연 배우만을 출력하기 위해 조건을 걸었다.

    이 조건이 없으면 이런 식으로 list의 값이 배열 수만큼 출력이 되는 오류가 발생한다.

  1. 값이 여러 개인 경우에는 ,로 구분할 수 있게 처리해줬다.
    varStatus = "actorStatus"
    actorStatus에는 현재 루프의 상태를 저장되어 있는데 현재 주연 배우가 목록의 첫 번째 요소가 아닌 경우에 쉼표가 출력 이 되게 해줬다.

    이렇게 하면 주연 배우 이름 사이에 쉼표가 표시되어서 목록이 보기 좋게 구분이 된다!

  2. 주연 배우의 이름을 출력

  3. 현재 주연 배우의 이름을 uniqueActors 라는 ArrayList에 추가해 이미 출력된 주연 배우를 추적하고 중복방지했다.

그 밑에 relaseyear나 genre도 동일한 방식으로 진행하였다!

0개의 댓글