TalkController.java
//전송된 데이터 처리
@PostMapping("/talk/talkRoomWrite")
public String talkRoomSubmit(TalkRoomVO vo, HttpSession session) {
log.debug("<<채팅방 생성>> :" + vo);
MemberVO user = (MemberVO)session.getAttribute("user");
//채팅 멤버 초대 문구 설정
vo.setTalkVO(new TalkVO());
vo.getTalkVO().setMem_num(user.getMem_num());
vo.getTalkVO().setMessage(user.getId()+"님이 ");
talkService.insertTalkRoom(vo);
return "redirect:/talk/talkList";
}
TalkMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.spring.talk.dao.TalkMapper">
<resultMap type="talkRoomVO" id="talkMap">
<result property="talkVO.message" column="message"/>
<result property="talkVO.chat_date" column="chat_date"/>
<result property="talkMemberVO.room_name" column="room_name"/>
</resultMap>
<sql id="talkSub">
FROM sptalkroom r JOIN sptalk_member m USING(talkroom_num)
LEFT OUTER JOIN (SELECT
talkroom_num,
mem_num,
COUNT(*) room_cnt
FROM sptalk_read
WHERE mem_num=#{mem_num}
GROUP BY talkroom_num, mem_num) e
USING(talkroom_num)
LEFT OUTER JOIN (SELECT
talk_num,
<![CDATA[
REPLACE(REPLACE(
REPLACE(message,'<','<'),'>','>'),'@{member}@','') message,
]]>
<!-- @{}@는 welcome 메시지 -->
chat_date,
talkroom_num
FROM sptalk WHERE talk_num IN (SELECT
MAX(talk_num)talk_num
FROM sptalk
GROUP BY talkroom_num))
USING(talkroom_num)
WHERE m.mem_num = #{mem_num}
<if test="keyword != null and keyword !=''">
AND room_name LIKE '%' || #{keyword} || '%'
</if>
</sql>
<!-- 채팅방 전체/검색 개수 -->
<select id="selectRowCount" parameterType="map" resultType="integer">
SELECT
COUNT(*)
<include refid="talkSub"></include><!-- 바로 위에서 만든 talkSub를 사용한다. -->
</select>
<!-- 채팅방 목록 -->
<select id="selectTalkRoomList" parameterType="map" resultMap="talkMap">
SELECT
*
FROM (SELECT
a.*,
rownum rnum
FROM (SELECT
*
<include refid="talkSub"></include>
ORDER BY chat_date DESC)a)
<![CDATA[
WHERE rnum >= #{start} AND rnum <= #{end}
]]>
</select>
</mapper>
talkserviceImpl
@Override
public List<TalkRoomVO> selectTalkRoomList(Map<String, Object> map) {
return talkMapper.selectTalkRoomList(map);
}
@Override
public Integer selectRowCount(Map<String, Object> map) {
return talkMapper.selectRowCount(map);
}
TalkController.java
/*===================
* 채팅방 목록
====================*/
@GetMapping("/talk/talkList")
public String chatList(@RequestParam(defaultValue = "1")
int pageNum, String keyword, HttpSession session, Model model) {
MemberVO user = (MemberVO)session.getAttribute("user");
Map<String,Object> map = new HashMap<String, Object>();
map.put("keyword",keyword);
map.put("mem_num",user.getMem_num());
int count = talkService.selectRowCount(map);
//페이지 처리
PagingUtil page = new PagingUtil(null,keyword,pageNum,count
,30,10,"talkList");
List<TalkRoomVO> list = null;
if(count > 0) {
map.put("start",page.getStartRow());
map.put("end",page.getEndRow());
list = talkService.selectTalkRoomList(map);
}
model.addAttribute("count",count);
model.addAttribute("list", list);
model.addAttribute("page",page.getPage());
return "talkList";
}
TalkController 내용추가
//초대한 회원의 id 구하기
private String findMemberId(TalkRoomVO vo,MemberVO user) {
String member_id = "";
long[] members = vo.getMembers();
for(int i=0;i<members.length;i++) {
String temp_id = memberService.selectMember(members[i]).getId();
//초대한 사람의 아이디는 제외
if(!user.getId().equals(temp_id)) {
member_id += temp_id;
if(i < members.length-1) member_id += ", ";
}
}
return member_id;
}
82라인의 내용추가
님이 이후로 내용을 넣어줌
vo.getTalkVO().setMessage(user.getId()+"님이 "+findMemberId(vo, user)+"님을 초대했습니다.@{member}@");
/*===================
* 채팅 메시지 처리
====================*/
@GetMapping("/talk/talkDetail")
public String talkDetail(long talkroom_num, Model model,HttpSession session) {
return "talkDetail";
}
까지 만들고
talkMapper.xml
<!-- 채팅 멤버 읽기 -->
<select id="selectTalkMember" parameterType="long" resultType="talkMemberVO">
SELECT
mem_num,
id,
room_name
FROM sptalk_member
JOIN spmember
USING(mem_num)
WHERE talkroom_num=#{talkroom_num}
</select>
TalkServiceImpl
@Override
public List<TalkMemberVO> selectTalkmember(Long talkroom_num) {
return talkMapper.selectTalkmember(talkroom_num);
}
TalkController 내용추가
아까 메서드 선언만 해둔 곳 내용추가
/*===================
* 채팅 메시지 처리
====================*/
@GetMapping("/talk/talkDetail")
public String talkDetail(long talkroom_num, Model model,HttpSession session) {
String chatMember = "";
String room_name ="";
MemberVO user = (MemberVO)session.getAttribute("user");
List<TalkMemberVO> list = talkService.selectTalkmember(talkroom_num);
for(int i=0; i<list.size(); i++) {
TalkMemberVO vo = list.get(i);
//로그인한 회원의 채팅방 이름 셋팅
if(user.getMem_num() == vo.getMem_num()) {
room_name = vo.getRoom_name();
}
//채팅 멤버 저장
if(i>0) chatMember += ",";
chatMember += list.get(i).getId();
}
//채팅 멤버 id
model.addAttribute("chatMember",chatMember);
//채팅 멤버수
model.addAttribute("chatCount",list.size());
//로그인한 회원의 채팅방 이름
model.addAttribute("room_name",room_name);
return "talkDetail";
}
tile-def => talk.xml
<definition name="talkDetail" extends="myPage">
<put-attribute name="title" value="채팅하기"/>
<put-attribute name="body" value="/WEB-INF/views/talk/talkDetail.jsp"/>
</definition>
views/talk => talkDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 채팅 메시지 처리 시작 -->
<script src="${pageContext.request.contextPath}/js/jquery-ui.min.js"></script>
<script src="${pageContext.request.contextPath}/js/message.talk.js"></script>
<div id="talkDetail" class="page-main">
<h1 id="chatroom_title"><span id="chatroom_name">${room_name}</span> 채팅방
<input type="button" value="채팅방이름 변경" id="change_name">
</h1>
<div class="align-right">
<input type="button" value="멤버추가" id="opener">
<input type="button" value="방탈출" id="delete_talkroom">
<input type="button" value="목록" onclick="location.href='talkList'">
</div>
<p>
채팅 멤버 :
<span id="chat_member">${chatMember}</span><span id="chat_mcount">(${chatCount}명)</span>
</p>
<div id="chatting_message"></div>
<form id="detail_form">
<input type="hidden" name="talkroom_num" id="talkroom_num" value="${param.talkroom_num}">
<textarea rows="5" cols="40" name="message" id="message"></textarea>
<div id="message_btn">
<input type="submit" value="전송">
</div>
</form>
</div>
<!-- 채팅 메시지 처리 끝 -->
mapper,service,serviceImpl Controller 부분에서
selectTalkMember 메서드가 Member가 아니라 member로 되어있어서 에러가 난다. 대문자로 고친후 다시 실행하면
'쌍용교육(JAVA) > SpringBoot' 카테고리의 다른 글
쌍용교육 -JSP수업 106일차 ch15SpringPage(17) (0) | 2024.07.17 |
---|---|
쌍용교육 -JSP수업 105일차 ch15SpringPage(16) (0) | 2024.07.16 |
쌍용교육 -JSP수업 103일차 ch15SpringPage(14) (0) | 2024.07.12 |
쌍용교육 -JSP수업 102일차 ch15SpringPage(13) (0) | 2024.07.11 |
쌍용교육 -JSP수업 101일차 ch15SpringPage(12) (0) | 2024.07.10 |