发送私信 是在 消息 页面


然后用 异步请求 发给服务器,
服务器根据给 发送 成功or失败的提示。

当然也可以 给某人私信:

要自动带上 当前目标的名字

1.发送私信功能

1.1在数据访问层dao中MessageMapper接口
补充方法

// 新增消息
int insertMessage(Message message);
// 修改消息的状态(设置已读功能 需要用到)
int updateStatus(List<Integer> ids, int status);

然后在MessageMapper.html实现insertMessage

<insert id="insertMessage" parameterType="Message" keyProperty="id">insert into message(<include refid="insertFields"></include>)<!-- 引用前述insertFields-->values(#{fromId},#{toId},#{conversationId},#{content},#{status},#{createTime})<!-- 分别赋值-->
</insert>

实现updateStatus

<update id="updateStatus">update message set status = #{status}where id in<foreach collection="ids" item="id" open="(" separator="," close=")"><!-- 遍历ids参数的集合collection,用item获取得到的属性值id--><!--open="(" 表示以 (开头。separator="," 表示以逗号隔开  -->#{id}<!-- 把id 拼成(,)形式--></foreach>
</update>

1.2业务层

在MessageService中增加方法:

public int addMessage(Message message) {message.setContent(HtmlUtils.htmlEscape(message.getContent()));//添加之前 要过滤标签message.setContent(sensitiveFilter.filter(message.getContent()));//添加之前 要过滤消息的敏感词return messageMapper.insertMessage(message);
}
   public int readMessage(List<Integer> ids) {//把消息变为已读,支持读多条消息,所以可以传入集合return messageMapper.updateStatus(ids, 1);}

1.3MessageController

@RequestMapping(path = "/letter/send", method = RequestMethod.POST)
@ResponseBody//因为是异步请求,所以要有此 注解
public String sendLetter(String toName, String content) {//toName是发送给谁,接受人的用户名。私信的内容contentUser target = userService.findUserByName(toName);//通过用户名 查询用户,得到idif (target == null) {//判断用户是否存在return CommunityUtil.getJSONString(1, "目标用户不存在!");//1代表错误}Message message = new Message();message.setFromId(hostHolder.getUser().getId());//当前用户idmessage.setToId(target.getId());if (message.getFromId() < message.getToId()) {//会话id,两个对话的人 id 中间 用横线拼起来,id小的在前,大的在后。if判断谁大谁小。message.setConversationId(message.getFromId() + "_" + message.getToId());} else {message.setConversationId(message.getToId() + "_" + message.getFromId());}message.setContent(content);//内容message.setCreateTime(new Date());//当前时间messageService.addMessage(message);return CommunityUtil.getJSONString(0);//没有报错,则返回 状态0。报错则将来统一处理异常。
}

1.4接下来写 页面逻辑

letter.js

$(function(){$("#sendBtn").click(send_letter);<!-- sendBtn 发送按钮,单击时调用send_letter方法 -->$(".close").click(delete_msg);
});function send_letter() {$("#sendModal").modal("hide");var toName = $("#recipient-name").val();var content = $("#message-text").val();$.post(<!-- post请求 -->CONTEXT_PATH + "/letter/send",<!-- 路径 -->{"toName":toName,"content":content},<!-- 要传入的参数 -->function(data) {<!-- 接受一个数据data -->data = $.parseJSON(data);<!-- 转为js对象-->if(data.code == 0) {<!-- 表明 发送成功 -->$("#hintBody").text("发送成功!");<!-- hintBody为提示框 -->} else {$("#hintBody").text(data.msg);}$("#hintModal").modal("show");<!--2000s后 重载当前页面-->setTimeout(function(){$("#hintModal").modal("hide");location.reload();}, 2000);});
}function delete_msg() {// TODO 删除数据$(this).parents(".media").remove();
}

处理默认带用户名

在letter detail 弹出框 中

测试:
首页

点击消息



发现多了一条 会话

可以点进去

点击给他私信:


发送成功后,刷新当前页面

那么如何实现
访问私信详情时,将显示的私信设置为已读状态。

在MessageController中
将 私信列表 中 未读的消息提取出来,自动设置为已读。
getLetterIds方法:

private List<Integer> getLetterIds(List<Message> letterList) {List<Integer> ids = new ArrayList<>();//实例化listif (letterList != null) {//不为空则遍历for (Message message : letterList) {if (hostHolder.getUser().getId() == message.getToId() && message.getStatus() == 0) {//当前用户是接收者时,才能把数据变为已读,如果是发送者,则本身就能读到发的消息。message.getStatus()判断消息是否为未读状态。ids.add(message.getId());}}}return ids;//得到集合中 未读消息的id
}
// 设置已读List<Integer> ids = getLetterIds(letterList);//得到id
if (!ids.isEmpty()) {//如果id非空messageService.readMessage(ids);//更改设为已读
}

测试
登录cc账号

发现有两条之前发送的未读消息

点进去后

点进去 则代表读了
返回以后,发现没有未读的状态了

说明设置ok了

3.27发送私信以及设置已读功能相关推荐

  1. 融云设置已读,未读消息标识

    融云设置已读,未读消息标识 需求:会话列表,以及会话界面发出去的消息前面加上已读,未读的标识 官方给的解决方案 1.您可以通过 rc_config.xml 里的开关,开启消息的阅读回执功能.默认 fa ...

  2. java imap 标记已读,JavaMail通过IMAP和POP3接收未读以及设置已读邮件

    JavaMail通过IMAP和POP3接收未读以及设置已读邮件 博客分类: javamail javamailpop3imap 使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap ...

  3. Android ListView点击之后保持更换的背景色,实现已读功能

    因为项目中有这样的需求:一般消息类或者资讯类的界面,都有类似于网易客户端的点击之后更换背景色,并且保持这个颜色,表示已读取该条信息.这个功能一开始觉得已经实现了,在我的另一篇博客上有:点击打开链接 后 ...

  4. 【总结整理】已读功能---摘自《馒头商学院》

    ① "已读"功能 正如网友评论: "已读对于优势方来说是个想要去掉的功能,而对于劣势方来说是唯一的指望." 不平等的关系中,一个"已读"便是 ...

  5. IM热门功能讨论:为什么微信里没有消息“已读”功能?...

    本文原文由"狼和哈士奇"原创分享,本次内容有改动. 1.引言 张小龙说:微信消息不做"已读"和"未读"的功能,是因为要给人撒谎的机会,这才符 ...

  6. qq文件对方接收后一定会有提示吗_为什么微信、QQ不推出已读功能?因为它敢出网友就敢卸载...

    12月14日,腾讯 QQ突然发起了一个"很吓人"的调查--你希望 QQ 出已读功能吗? 在短时间内,有 超过3000 人参与,其中有 2660 人(71.6%)投票 "你 ...

  7. qq文件对方接收后一定会有提示吗_QQ要增加消息已读功能,你是否赞成?

    昨天腾讯QQ在微博发起了一项投票:你希望QQ出已读功能吗? 497人参与了投票,结果是不出意外的有近一半的人投反对票. 其实道理很简单,QQ一个交友聊天工具出这样的功能,完全没有隐私可言,例如,当你的 ...

  8. 肺功能曲线图怎么看_QQ或将推出已读功能?!你怎么看?| 微博报

    QQ回应推出已读功能 12月14日上午,腾讯QQ官方微博发起了一项投票,内容是"你希望QQ出已读功能吗?"关于这个问题QQ给网友们提供了三个选项:1.立刻马上搞快点!2.你出我就卸 ...

  9. IM热门功能讨论:为什么微信里没有消息“已读”功能?

    本文原文由"狼和哈士奇"原创分享,本次内容有改动. 1.引言 张小龙说:微信消息不做"已读"和"未读"的功能,是因为要给人撒谎的机会,这才符 ...

最新文章

  1. Algs4-1.1.21打印表格
  2. JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
  3. 极速写作2017彻底卸载_如何将 Flash 从 Mac 和 Windows 系统中彻底卸载?
  4. Android之Broadcast, BroadcastReceiver(广播)
  5. 惜缘-致家乡的一位女孩[原创]
  6. 前端之同源策略 Jsonp 与 CORS
  7. 怎么重置blockinput的锁_OPPOA9锁屏密码忘了怎么办? OPPO忘记锁屏密码的解决办法...
  8. 安装nvm nodejs npm webpack vue vue-cli
  9. Lesson2.2 2.3 Maya command reference quick help
  10. 理解HTTP 代理,负载均衡,缓冲(Buffering)和缓存(Caching)
  11. c# 配置系统未能初始化
  12. Ubuntu20.04安装ZOOM
  13. Sobel边缘检测算子的本质
  14. CSS border设置虚线可调节虚线间距
  15. 编写一个程序求解字谜游戏问题
  16. C#POP3协议实现SSL验证登陆GMAIL
  17. LQBv13-Python:猜年龄
  18. 【云原生】-Docker部署SQL Server及最佳应用
  19. 不要让 Chrome 成为下一个 IE!
  20. 文本编辑器(1.0)

热门文章

  1. APP推荐 - AirMore:移动设备与电脑间互传文件(iOS/Android)
  2. 荣耀v30鸿蒙5g荣耀有隔空操作吗,荣耀V30没秘密了,隔空操作+麒麟990+后置四摄,要干翻小米?...
  3. C#读写设置修改调整UVC摄像头画面-白平衡
  4. java http请求图片_Java上传带图片的Http请求
  5. 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?
  6. vector转换成数组
  7. minecraft服务器地皮信息,minecraft服务器里肿么共享地皮
  8. CATIA转的STP打开什么都没有_第五篇:STP
  9. 腾讯云GPU服务器GN8/GN7/GN6S/GN10Xp/GI3X/GT4
  10. GitHub个人仓库的创建以及新建文件和上传文件