为自己的 SSM项目设计评论功能

news2025/1/12 6:11:59

为自己的 SSM项目设计评论功能

  • 设计思路
  • 增加评论
  • 显示评论
  • 评论总数

设计思路

在这里插入图片描述

  • 首先需要设计评论信息的实体类(对应评论表)
    在这里插入图片描述
  • 主要分为以下2个功能:

显示所有评论
当我们进入文章详情页的时候,页面就会通过 ajax 发送请求给服务器,这个请求中就带有这篇文章的 id ,服务器就可以通过文章的 id 获取评论数据,最后返回给客户端。

增加评论
当用户在评论框中输入评论,点击评论按钮就会触发 ajax 请求,请求中就带有这篇文章的 id 和用户评论的信息,服务器接收到请求后,通过 session 获取用户的 id 数据,将 用户 id 、文章 id 、评论信息、用户名这4个数据增加到评论表中的一条数据中,最后通过 js 刷新页面,重新展示评论信息。

获得的评论数
当我们进入文章详情页的时候,页面就会通过 ajax 发送请求给服务器,这个请求中就带有这篇文章的 id ,服务器就可以通过文章 id 获取该篇文章的评论总数,最后返回给客户端。

增加评论

 function addComment() {
            //非空校验
            var inputComment = jQuery("#input-comment");
            if (inputComment.val() == "") {
                alert("评论不能为空!");
                inputComment.focus();
                return;
            }
            var aid = getURLParam("id");
                if(aid != null && aid >0){
            jQuery.ajax({
                type: "POST",
                url: "/comment/add",
                data: {
                    "aid": aid,
                    "comment": inputComment.val()
                },
                success: function (result) {
                    if (result != null && result.code == 200 && result.data == 1) {
                        alert("评论成功!");
                        //刷新当前页面
                        location.href = location.href;
                    } else {
                        alert(result.msg);
                    }
                }
            });
        }

        } 
@RequestMapping("/add")
    public Object add(HttpServletRequest request, CommentInfo commentInfo) {
        //非空校验
        if(commentInfo == null  || !StringUtils.hasLength(commentInfo.getComment())) {
            return AjaxResult.fail(-1, "参数错误!");
        }
        //获取当前用户 id
        UserInfo userInfo = SessionUtil.getLoginUser(request);
        if(userInfo == null || !StringUtils.hasLength(userInfo.getUsername()) ||
                !StringUtils.hasLength(userInfo.getPassword())) {
            return AjaxResult.fail(-1, "请登录后评论!");
        }
        //设置 uid后存储评论数据
        commentInfo.setUid(userInfo.getId());
        commentInfo.setUsername(userInfo.getUsername());
        return AjaxResult.success(commentService.add(commentInfo));
    }

显示评论

 function showComment() {
        var aid = getURLParam("id");
            jQuery.ajax({
                type: "POST",
                url: "/comment/show",
                data: {"aid": aid},
                success: function (result) {
                    if (result != null && result.code == 200) {
                        var CommentListDiv = "";
                        for (var i = 0; i < result.data.length; i++) {
                            var CommentInfo = result.data[i];
                            CommentListDiv += '<div class="card">';
                            CommentListDiv += '<span class="reviewer"><a href="myblog_list.html?id='+CommentInfo.uid+'" target="_blank">' + CommentInfo.username + ':</a></span>';
                            CommentListDiv += '<span id="createtime">' + CommentInfo.createtime + '</span>'
                            CommentListDiv += '<p class="comment">';
                            CommentListDiv += CommentInfo.comment;
                            CommentListDiv += '</p>';
                            CommentListDiv += '</div>';
                        }
                        //将 html 填充进去
                        jQuery("#commentDiv").html(CommentListDiv);
                    } else {
                        alert("评论信息获取失败!");
                    }
                }
            });
        }
        showComment();
 @RequestMapping("/show")
    public Object show(Integer aid) {
        //非空校验
        if(aid == null) {
            return AjaxResult.fail(-1, "参数错误!");
        }
        //通过文章 id 获取所有该文章的评论
        return AjaxResult.success(commentService.showCommentByAid(aid));
    }

评论总数

 @RequestMapping("/myComment")//查询单篇文章评论
    public  Integer myComment(Integer aid){
        if(aid == null) {
            return 0;
        }
        //通过文章 id 获取所有该文章的评论
        int total = commentService.getCommentsByAid(aid);
        return  total;
    }
 var total=0;//评论总数
    function myComment(){
        var aid = getURLParam("id");
        if(aid != null && aid >0){
        jQuery.ajax({
                url:"/comment/myComment",
                type:"POST",
                data:{ "aid": aid},
                success:function(result){
                     if(result.code ==200 && result.data != null){
                        total = result.data;
                        jQuery("#commentsCount").text(total);
                     }
                },
                error:function(err){
                }

            })
        }
     }
     myComment();

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电厂人员定位方案可以使用多种技术来实现

电厂人员定位方案可以使用多种技术来实现。以下是一个常见的电厂人员定位方案的步骤&#xff1a; 1.选取合适的定位技术&#xff1a;根据电厂的需求和运行环境&#xff0c;选择适合的定位技术&#xff0c;例如基于UWB&#xff08;Ultra-Wideband&#xff09;、RFID&#xff08…

Linux 黑话解析:什么是 LUKS 加密?

导读LUKS 是 Linux 用户中流行的磁盘加密机制。在这篇术语解析文章中&#xff0c;可以了解更多关于 LUKS 的信息。 计算机安全旨在保护私密信息。有许多方法可以保护系统。一些用户使用简单的用户名/密码登录方案进行基本保护。其他用户可能会通过加密以不同的方式增加额外的保…

Leetcode 剑指 Offer II 040. 矩阵中最大的矩形

题目难度: 困难 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个由 0 和 1 组成的矩阵 matrix &#xff0c;找出只包含 1…

c语言实现MD5算法

MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 &#xff08;基于qt5.14.2&#xff09;测试记录 MD5介绍 1。 一种单向加密算法&#xff0c;即对明文加密&#xff0c;而不能通过密文得到明文。对原数据的任何改动&#xff0c;哪怕是1字节&#xff0c;得到的MD5值都有很大的区…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道&#xff0c;操作系统是基于消息和事件处理的&#xff0c;所以我们只要找到该操作系统锁屏和解屏的那个事件&#xff0c;然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录&#xff1b; 下面是项目目录&#xff1a…

vue的scrollTop手机环境设置值失效,本地正常可以赋值

获取div盒子ref或者document获取都行 监听方法 一定要加this.$nexttick,在本地测试只用nexttick是没有问题的&#xff0c;但是到手机测试就不行了&#xff0c;原因是因为手机渲染比本地更快&#xff0c;所以结合setTimeout使用 如果有更好的处理方法&#xff0c;恳请大佬指点一…

C语言——通讯录详解(动态版)

通讯录详解 前言&#xff1a;一、定义一个通讯录二、初始化三、增加联系人3.1 给通讯录扩容3.2增加联系人 四、释放内存五、完整代码 前言&#xff1a; 我们已经学过了通讯录的静态版&#xff0c;但是它的缺点很明显&#xff0c;通讯录满了就添加不了联系人了啦。我再让通讯录升…

为什么要用i ,√(-1)不行吗?

首先讲一下&#xff0c;我不是拦着各位使用√(-1)&#xff0c;这只是一种记号&#xff0c;在这里只是探讨一下一些数的性质而已 我们首先需要探讨下根式的一个性质&#xff0c;下面将会讲一个关于小明的故事&#xff1a; 他的老师在黑板上写下这么一道题 一道很正常的题 他的同…

vue3 setup语法糖导入mixin

像这样直接导入&#xff0c;然后通过defineOptions声明mixin 然后就可以在这个组件使用mixin里的数据和方法了

YOLOv5复现过程出现的问题(关于数据集路径)dataset not found

YOLOv5复现过程出现的问题&#xff08;关于数据集路径&#xff09; 在复现YOLOv5时&#xff0c;按照唐老师的教程&#xff08; https://www.bilibili.com/video/BV11K41167Ar?t122.1&p63&#xff09;下载好了数据集&#xff08;MaskWearing就是检测口罩的一个&#xff0c;…

Linux常用命令——dirname命令

在线Linux命令查询工具 dirname 去除文件名中的非目录部分 补充说明 dirname命令去除文件名中的非目录部分&#xff0c;仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符&#xff0c;删除其他部分&#xff0c;并写结果到标准输出。如果最后一…

java 向上取整 java对小数取整

取整方法 Math.floor(double a) 向下取整 Math.ceil(double a) 向上取整 Math.round(double a) 四舍五入 0.5向下取整 Math.rint(double a) 就近取整 1.6接近2&#xff0c;所以就取2 1.4接近1&#xff0c;所以就取1 1.5跟1和2都很接近&#xff0c;这时候就取偶数 (int) 类型强转…

【CTF-web】buuctf-[极客大挑战 2019]EasySQL 1(sql注入)

题目链接 根据题目判断出可能需要sql注入&#xff0c;看源码可知数据是通过GET的方式传输的&#xff0c;即放在url的username和password两个参数中。 只要将username输入为1 or 11#&#xff0c;password可以为任何值&#xff0c;即可顺利登录。 需要注意的是url中的井号表示…

innovus IMPSP-270 place阶段lib_cell找不到可放置位置问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 通过manual我们知道产生这个问题的原因有两个&#xff0c;要么没row&#xff0c;你需要重新floorplan initCoreRow&#xff0c;另外可能是设置了setPlaceMode -prerouteAsObs&a…

【PLC】上位机通过SMLP协议与三菱FX5U通信

0. 准备步骤 准备三菱 FX5U PLC 0.1 安装 GX Works3 首先点击右侧链接进入三菱官网&#xff0c;下载 GX Works3&#xff08;需要注册三菱的账号&#xff09; 若不想进官网下载也可以下载我为大家准备的网盘安装包&#xff1a;百度网盘安装包 GX Works3 下载完成后解压&#…

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭

秋招实习刷题网站推荐&#xff1a;codefun2000.com&#xff0c;还有题解博客&#xff1a;blog.codefun2000.com/。以下内容都是来自塔子哥的~ 输入输出 2023.04.15-春招-第三题-魔法之树 //#include<bits/stdc.h> #include<vector> #include<iostream>usin…

C++ STL常用算法(详解)

C常用算法 C sort()排序函数用法详解 C STL 标准库提供有很多实用的排序函数&#xff0c;如表 1 所示。通过调用它们&#xff0c;我们可以很轻松地实现对普通数组或者容器中指定范围内的元素进行排序。 ​ 表 1 C STL 排序函数 函数名用法sort (first, last)对容器或普通数…

广度优先遍历与最短路径(Java 实例代码源码包下载)

目录 广度优先遍历与最短路径 Java 实例代码 src/runoob/graph/ShortestPath.java 文件代码&#xff1a; 广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发&#xff0c;首先访问这个结点&#xff0c;并将其标记为已访问过&#xff0c;然后顺序访问结点v的所有未被访问…

Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPooled的使用2.1、使用JedisPooled2.2、关于连接池 3、SpringBoot下使用Redis3.1、引入Maven依赖3.2、配置Redis连接3.…

POJ 1995 Raising Modulo Numbers 快速幂

一、总结 我一开始担心溢出&#xff0c;开了一个无符号的long long&#xff0c;但是直接超时&#xff0c;后来一看它的mod不是很大&#xff0c;于是改成int&#xff0c;直接过了。 二、代码 #include <iostream> using namespace std; int H, Z; int M; int mulMod(in…