- 의료진 계정 검색 결과가 여러 행인 경우, 마지막으로 검색된 데이터로 다 덮어씌워지고 있다.
- DoctorDao.java는 이렇게 작성되어 있다.
- 요청시 넘어온 진료과 값이 '전체' 일경우 조건 없이 select 하고, 특정 진료과 값이 있다면 그 값을 조건으로 select 한다.
- 쿼리를 실행한 결과를 doctor, member 두 vo 객체에 나눠 담는다.
- 두 vo 객체를 Map<K, V> 객체에 담는다.
"doctor"라는 key 값을 제시하면 Object로 형변환된 Doctor 객체가 나오고,
"member"라는 key 값을 제시하면 Object로 형변환된 Member 객체가 나온다.
- 서블릿에서 응답페이지로 이동시키면서 이동 데이터로 List<Map<String, Object>> list를 담는다.
- jsp에서 <% List<Map<String, Object>> list = (List<Map<String, Object>>)request.getAttribute("list"); %> 으로 꺼내서 쓴다.
- 그런데 오류가 발생하진 않았지만 마지막에 Map에 담은 Doctor, Member 객체로 다른 행들도 다 덮어쓰여지고 있다.
ㅁ 오답 원인
- List<Map<String, Object>> list와 Map<String, Object> docMap을 둘 다 바깥에 써놨는데, 이게 문제다.
- Map 객체는 참조 타입이므로 반복문에서 같은 Map 객체를 사용해서 데이터를 덮어쓰면
반복문에서 list에 add로 넣는다고 해도, Map들이 다 같은 주소를 참조하고 있으므로
마지막으로 저장한 값으로 Map들이 다 똑같아진다.
ㅁ 해결
- Map 객체를 반복문 안에서 선언해서 각기 다른 Map 객체가 List<Map<String, Object>>에 담기도록 한다.
- 여러 행이어도 중복되지 않고 정상적으로 보여진다.
'프로젝트 > 세미프로젝트-병원 종합정보시스템 사이트' 카테고리의 다른 글
[오답] SYSDATE로 INSERT한 데이터가 조회되지 않음 (0) | 2024.09.26 |
---|---|
[오류] java.sql.SQLSyntaxErrorException (1) | 2024.09.23 |
[오류] java.lang.Error: Unresolved compilation problem (0) | 2024.09.22 |
[오류] java.lang.NullPointerException (1) | 2024.09.22 |
쿼리들 (0) | 2024.09.20 |