开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

news/2024/5/9 12:13:09/文章来源:https://javayz.blog.csdn.net/article/details/103287161

当有人回复了你的问题时,肯定需要有通知能让我们看到,今天就来完成最后一个大功能--回复通知。具体的效果如下:

当有未读通知时,在导航栏上会显示未读通知的数量,点进去后能看到未读的信息,点击每条未读信息后,未读标志就会消失,通知上的数字也相应减少,通知的数据还是以分页的方式给出,这里就可以使用前面写好的分页代码。

(一)搭建Notification数据库

我们需要为通知搭建一个数据库,里面需要包含的数据有:id(主键,唯一标识通知),notifier(发起通知的人,也就是评论的人),receiver(收到通知的用户,也就是问题的发起者),outerid(当用户评论问题时,outerid为问题的id;当用户回复评论时,outerid就是评论的id),type(用来标识用户回复的是问题还是评论),createtime(通知的时间),status(该通知是否已读)

CREATE TABLE `notification` (`id` int(11) NOT NULL AUTO_INCREMENT,`notifier` int(11) NOT NULL,`receiver` int(11) NOT NULL,`outerid` int(11) NOT NULL,`type` int(11) NOT NULL,`createtime` bigint(20) NOT NULL,`status` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`)
)

写完数据库后下一步就是建实体类了,新建notification.class,里面包含上面的所有属性和setter and  getter方法,代码就不放了。

我们最终需要把数据拿给前端使用,因此需要封装一个NotificationDto,里面包含了所有给到前端的数据,在notification的基础上,加上了User类型的notifier(发起通知者的所有信息,通过id查到)和String类型的outercontent(通过拿到的outerid读取到具体的内容),再加上questionid,用于点击后跳转到具体的问题详情页。

public class NotificationDto {private int id;private int receiver;private int type;private long createtime;private int status;private User notifier;private String outercontent;private int questionid;//省略了setter and getter方法
}

(二)将通知数据传递给前端

我的通知和我的消息放在一起,之前是在PersonalController中写的,我们回到PersonalController中,增加两条代码:

PageDto<NotificationDto> notifications= notificationService.list(user.getId(),page,size);
model.addAttribute("notifications",notifications);

notifications中包含的内容有NotificationDto里的所有东西,还包括了之前写的页面信息,是否显示上一页,是否显示下一页等等。对于这个功能具体的实现形式我放在了notificationService里去写。传入三个数据,当前用户的id,当前的page页码和每一页要展示的内容数量,分页的代码基本上和之前首页的分页代码一致,就不再详细讲了,大家可以看第五篇博客。

@Service
public class NotificationService {@Resourceprivate NotificationMapper notificationMapper;@Resourceprivate UserMapper userMapper;@Resourceprivate QuestionMapper questionMapper;@Resourceprivate CommentMapper commentMapper;//返回一个PageDtopublic PageDto list(int id, int page, int size) {PageDto pageDto = new PageDto();int totalcount = notificationMapper.count(id);pageDto.setPagination(totalcount, page, size);int offset = size * (page - 1);List<Notification> notifications = notificationMapper.list(id, offset, size);List<NotificationDto> notificationDtoList = new ArrayList<>();//将notification插入到notificationDto中,再将user信息也插入到notificationDto中//最后插入到notificationDtoList列表里for (Notification notification : notifications) {User user = userMapper.findById(notification.getNotifier());NotificationDto notificationDto = new NotificationDto();BeanUtils.copyProperties(notification, notificationDto);notificationDto.setNotifier(user);String outercontent;if (notification.getType() == notificationEnum.NOTIFICATION_QUESTION.getType()) {outercontent = questionMapper.gettitlebyid(notification.getOuterid());//插入问题的idnotificationDto.setQuestionid(notification.getOuterid());} else {outercontent = commentMapper.getcontentbyid(notification.getOuterid());//插入问题的idComment comment=commentMapper.getparentbyid(notification.getOuterid());notificationDto.setQuestionid(comment.getParent_id());}notificationDto.setOutercontent(outercontent);notificationDtoList.add(notificationDto);}//在pageDto中插入notificationDtoListpageDto.setData(notificationDtoList);return pageDto;}
}

(三)前端页面对收到的数据进行展示

前端数据的展示依旧用到Thymeleaf展示,用th:each的方式循环所有内容,用th:text打印内容,如果查到notification.status=0,则显示未读标签,当点击问题后,通过具体的通知id进入NotificationController处理逻辑。

<div class="media" th:each="notification:${notifications.data}"><span th:text="${notification.notifier.name}"></span><span th:if="${notification.type==1}">回复了你的评论</span><span th:if="${notification.type==2}">回复了你的问题</span><a th:href="@{'/notification/'+${notification.id}}"><span th:text="${notification.outercontent}"></span></a><span class="label label-danger" th:if="${notification.status==0}">未读</span><br><span th:text="${#dates.format(notification.createtime,'yyyy-MM-dd')}"></span><hr>
</div>

 新建NotificationController用来处理通知的后端逻辑,主要的思路是当用户点击这条通知时,把该通知的status修改1(已读),并且根据outerid跳转到相应的问题详情页面

//将通知设置为已读,并且跳转到问题页面
@Controller
public class NotificationController {@Resourceprivate NotificationMapper notificationMapper;@Resourceprivate CommentMapper commentMapper;@GetMapping("/notification/{action}")public String notification(@PathVariable("action")int id,HttpServletRequest request){//将通知设置为已读notificationMapper.updatestatus(id);//获取type,检验是回复评论还是回复问题int type=notificationMapper.gettypebyid(id);int outerid=notificationMapper.getouteridbyid(id);int questionid;if(type== notificationEnum.NOTIFICATION_QUESTION.getType()){questionid=outerid;}else {questionid=commentMapper.getparentidbyid(id);}return "redirect:/question/"+questionid;}
}

最后还需要展示给用户有几条未读信息,为了能在任何地方都看到未读信息,我把它放进session里,修改session相关的代码,添加这样两行:

//获取未读的消息数量int unreadnum=notificationMapper.getunreadcount(user.getId());request.getSession().setAttribute("unreadnum",unreadnum);
}

 最后在前端需要用到的地方直接从session中调取即可。

至此,关于论坛的所有大功能就全部完成了,接下来的任务就是一些页面的布局和小功能的修复,

源码如下:github源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715427.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…

unsharp mark 算法_Google SEO-BERT算法更新

一. BERT介绍BERT的全称为&#xff1a;Bidirectional Encoder Representations from Transformers&#xff0c;基于神经网络的自然语言处理预训练的技术。谷歌说BERT就像是一个超大的同义词系统。2019 年 10 月 25 日&#xff0c;Google 宣布 BERT 更新上线&#xff0c;正式成为…

有些网站打开一半空白_如何发一条空白的朋友圈

所谓空白的朋友圈就是一条看起来没有文字的朋友圈&#xff0c;因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的&#xff0c;只是人的肉眼看不见&#xff0c;所以相当于空白。不可见字符不可见字符就是零宽空格&#xff0c;见维基百科解释https://zh.wikip…

另类网站版式设计欣赏

另类网站版式设计欣赏 当你在创建一个新网站的时候&#xff0c;希望这些网站富有个性的版式设计能给你带来灵感。 Popmatik 这是Rob Leach设计制作的一个个人网站&#xff0c;这个网站用了一个瓶子的底图&#xff0c;网站的内容都在瓶子的这个包装纸上。 Digitalmash.com Digi…

大型网站架构系列:负载均衡详解(3)

大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09; 原文:大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09;本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结一、软件负载均衡概述 硬件负载均衡性能优越…

基于Dockfile构建JAVA环境网站镜像

查看本地目录 [rootdocker tomcat]# ls apache-tomcat-8.5.16.tar.gz Dockerfile jdk-8u91-linux-x64.tar.gz server.xml [rootdocker tomcat]# vim Dockerfile FROM centos:7 MAINTAINER zhaochengcheng ADD jdk-8u91-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/loca…

linux卸载服务器软件,linux卸载软件命令是什么_网站服务器运行维护,linux

win10系统提示需要提供管理员权限才能更改这些属性怎么办_网站服务器运行维护win10系统提示需要提供管理员权限才能更改这些属性的解决方法是&#xff1a;1、首先打开系统设置&#xff0c;进入【账户】选项&#xff1b;2、然后切换到【家庭和其他用户】&#xff0c;点击【更改账…

[目录] ASP.Net Core 搭建微服务网站

本项目采用ASP.Net Core微服务技术&#xff0c;搭建博客和Saas平台。 全文将围绕&#xff08;1&#xff09;设计模式 &#xff08;2&#xff09;敏捷开发 目的&#xff1a; 结构足够合理&#xff0c;代码足够优美&#xff0c;扩展性、可读性、易维护性做到最优。 以下目录…

网站建设流程-面向公司

1. 网站简明开发流程 简明开发流程是指假设网站开发的每个步骤都可以一次设计开发成功时的网站开发流程。   流程图如下&#xff1a; 2. 网站操作开发流程 网站操作开发流程是指假设网站开发的每个大的步骤都有可能产生未知问题时的网站开发流程。整个开发过程一般会有…