본문 바로가기
프로젝트/파이널프로젝트-대학 행정 그룹웨어

[문제] 1대1 채팅방 상대의 사번이 보이지 않고 내 사번이 보임

by moca7 2024. 11. 14.

 

 

 

ㅁ 문제 발생

 

 

 

- 사번이 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이 잘 보인다.