ㅁ 문제 발생
- 사번이 B0001인 사원으로 로그인해서 사번이 B0005인 사원과 1:1 채팅방을 만들었다.
- B0001인 사원은 상대방인 B0005가 잘 보인다.
- 사번이 B0005인 사원으로 로그인하고 메신저 페이지로 왔다.
상대방 사번인 B0001이 보여야 하는데 내 사번인 B0005가 보인다.
// 2. 로그인한 유저가 속한 채팅방 리스트 조회하기.
List<ChatRoomDto> list = chatService.selectChatRoomList(userNo); // 로그인한 유저가 속한 채팅방 DTO가 list로 담김.
List<Map<String, Object>> list2 = new ArrayList<>(); // 응답 페이지로 넘길 list.
for(ChatRoomDto c : list) {
Map<String, Object> map = new HashMap<>();
map.put("chatRoomDto", c);
map.put("count", chatService.selectChatRoomPeopleCount(c.getRoomNo()) ); // 3. 채팅방 번호로 채팅방 인원수 구하기.
List<UserChatRoomDto> list40 = chatService.selectUserChatRoomList(c.getRoomNo()); // 4. 채팅방 번호로 유저-채팅방 매핑 테이블에서 user_no, join_time, join_yn 조회. (1대1 채팅방에 상대 보여줌)
System.out.println("리스트40:" + list40.toString());
for(UserChatRoomDto u : list40) {
if(u.getUserNo() != userNo) {
System.out.println("@@#@#@#@#" + u.getUserNo());
map.put("counterpart", u.getUserNo());
}
}
list2.add(map);
}
model.addAttribute("list2", list2);
- DB에서 조회는 정상적으로 되고 있다.
이 채팅방에 속한 B0001과 B0005 사원의 사번이 담긴 UserChatRoomDto들이 List로 온다.
- 문제는 if문으로으로 내 사번(B0005)과 같은 사번은 걸러내고 있는데 걸러내지 못하고 있다.
ㅁ 원인
- String은 참조 타입이므로 == 연산자는 문자열의 주소값을 비교한다.
- ==로 비교할 경우 문자열의 실제 내용이 같더라도 다른 객체를 참조하는 경우 false를 반환할 수 있다.
- String형간의 비교에서 문자열 내용 비교는 ==, !=이 아닌 .equals()를 사용해야 한다.
- 기본적인건데 잊고 있었다.
ㅁ 해결
- if(u.getUserNo() != userNo)를 if(!u.getUserNo().equals(userNo))으로 바꾼다.
- 조회된 2개의 값 중 내 사번과 일치하는 사번은 조건처리로 잘 걸러지고 있다.
- 사번이 B0005인 사원으로 로그인한다. 상대방 사번인 B0001이 잘 보인다.
'프로젝트 > 파이널프로젝트-대학 행정 그룹웨어' 카테고리의 다른 글
[문제] 예약 내역에서 비품이 안 보임 (0) | 2024.11.27 |
---|---|
[문제] 나갔다 들어오면 채팅이 안보임 (0) | 2024.11.19 |
파이널 프로젝트 받아오기 (0) | 2024.11.08 |
Spring Boot 프로젝트에 Swagger 적용하기 (1) | 2024.11.07 |
파이널 프로젝트 만들기 (스프링 부트) (3) | 2024.11.06 |