基于 Spring Boot 博客系统开发(十)

基于 Spring Boot 博客系统开发(十)

本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿
基于 Spring Boot 博客系统开发(九)👈👈

文章管理实现

主要实现功能有文章发布、文章编辑、文章删除

文章发布和编辑实现

AdminController 添加编辑页面路由

    @RequestMapping("/edit")
    public String edit(Model model){
        model.addAttribute("article",new Article());
        return "admin/edit";
    }

    @RequestMapping("/edit/{id}")
    public String edit(@PathVariable("id") Long id,Model model){
        Article  article = articleService.getById(id);
        model.addAttribute("article",article);
        return "admin/edit";
    }

ArticleController 添加文章保存或修改方法

@Controller
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    private IArticleService articleService;

    @RequestMapping("/saveOrUpdate")
    @ResponseBody
    public AjaxResult saveOrUpdate(Article article){
        if(article.getId() == null){
            article.setCreated(LocalDate.now());
        }else{
            article.setModified(LocalDate.now());
        }
        articleService.saveOrUpdate(article);
        return AjaxResult.success();
    }

saveOrUpdate:根据id是否为空 判断是否执行添加或者修改
当文章对象 id 不为null 说明本方法需要进行修改,否则执行添加操作

编辑页面表单

<form id="articleForm">
    <input type="hidden" name="id" th:value="${article.id}" id="id"/>
    <input type="hidden" name="allowComment" value="true" id="allow_comment"/>
    <input type="hidden" name="content"  id="content-editor"/>
    <div class="form-group col-md-6" style="padding: 0 10px 0 0;">
        <input type="text" class="form-control" placeholder="请输入文章标题(必须)" th:value="${article.title}" name="title" required="required" aria-required="true"/>
    </div>
    <div class="form-group col-md-6" style="padding: 0 10px 0 0;">
        <input name="tags" id="tags" type="text" class="form-control" th:value="${article.tags}" placeholder="请输入文章标签" />
    </div>
    <div class="clearfix"></div>
    <div id="md-container" class="form-group">
        <textarea id="md-editor" th:text="${article.content}"></textarea>
    </div>

    <div class="clearfix"></div>

    <div class="text-right">
        <a class="btn btn-default waves-effect waves-light" href="/admin/list">返回列表</a>
        <button type="button" id="saveBtn" class="btn btn-primary waves-effect waves-light" >
            保存文章
        </button>
    </div>
</form>

点击保存文章按钮事件

        $("#saveBtn").click(function(){
        $("#content-editor").val(mditor.value)
            $.ajax({
                type: 'post',
                url: '/article/saveOrUpdate',
                data: $("#articleForm").serialize(),
                async: true,
                dataType: 'json',
                success: function (result) {
                    if(result.code == 0){
                        alert("文章发布成功");
                        window.location.href="/admin/list";
                    }else{
                        alert(result.msg)
                    }
                    console.log(result)
                }
            });
        });

点击文章编辑按钮代码

 <a th:href="${'/admin/edit/'+article.id}" class="btn btn-primary btn-sm waves-effect waves-light m-b-5">
 		<i class="fa fa-edit"></i> <span>编辑</span>
 </a>

点击发布文章菜单,编辑文章内容保存
在这里插入图片描述
保存成功在文章列表可查询到
在这里插入图片描述

编辑文章的回显效果
在这里插入图片描述

文章删除实现

首先,在ArticleController.java 中 添加 delete 方法

    @RequestMapping("/delete")
    @ResponseBody
    public AjaxResult delete(Long id){
        articleService.removeById(id);
        return AjaxResult.success();
    }

然后添加文章列表删除按钮代码,当点击删除按钮执行 delArticle 方法脚本

<td>
    <a th:href="${'/admin/edit/'+article.id}" class="btn btn-primary btn-sm waves-effect waves-light m-b-5">
        <i class="fa fa-edit"></i> <span>编辑</span>
    </a>
    <a href="javascript:void(0)" th:onclick="'delArticle('+${article.id}+')'"
       class="btn btn-danger btn-sm waves-effect waves-light m-b-5">
        <i class="fa fa-trash-o"></i> <span>删除</span></a>
    <a class="btn btn-warning btn-sm waves-effect waves-light m-b-5" th:href="${'/article/'+article.id}" >
        <i class="fa fa-rocket"></i> <span>预览</span></a>
</td>

delArticle 方法脚本

        function delArticle(id) {
            if(confirm('确定删除该文章吗?')){
                $.ajax({
                    type:'post',
                    url : '/article/delete',
                    data: {id:id},
                    dataType: 'json',
                    success: function (result) {
                        if (result.code==0) {
                            window.alert("文章删除成功");
                            window.location.reload();
                        } else {
                            window.alert(result.msg || '文章删除失败')
                        }
                    }
                });
            }
        }

点击删除,提示确认删除?,确定删除成功后重新加载当前页面

在这里插入图片描述

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

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

相关文章

小红书笔记怎么发浏览量高?

小红书笔记发布是有技巧和策略的&#xff0c;为什么有的小红书笔记浏览量那么高&#xff0c;是因为下足了功夫&#xff0c;小红书笔记怎么发浏览量高&#xff1f;今天伯乐网络传媒就来给大家揭秘一下。 一、选题与定位 1. 热门话题选择 要想提高小红书笔记的浏览量&#xff0…

Python | Leetcode Python题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution:def numDecodings(self, s: str) -> int:n len(s)# a f[i-2], b f[i-1], c f[i]a, b, c 0, 1, 0for i in range(1, n 1):c 0if s[i - 1] ! 0:c bif i > 1 and s[i - 2] ! 0 and int(s[i-2:i]) < 26:c aa,…

【Leetcode每日一题】 综合练习 - 括号生成(难度⭐⭐)(76)

1. 题目解析 题目链接&#xff1a;22. 括号生成 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题描述 我们需要找出所有可能的、有效的括号序列。一个有效的括号序列指的是一个仅由(和)组成的字符串&#xff0c;…

异步编程CompletableFuture总结

文章目录 1. 简介&#xff1a;2. 比较1、传统方式2、使用CompletableFuture&#xff1a;异步执行返回值 3、组合处理&#xff1a;anyOfallof : 4. 异步回调&#xff1a;thenAcceptthenApplywhenComplete等同于 thenAccepthandel()等同于thenApply 5. 常用方法&#xff1a;1、su…

深度优先搜索汇总

常用英文 最近公共祖先&#xff08;Lowest Common Ancestor&#xff0c;简称LCA&#xff09; posterity&#xff0c;英语单词&#xff0c;主要用作名词&#xff0c;作名词时译为“子孙&#xff0c;后裔&#xff1b;后代”。 什么是深度优先搜索 深度优先搜索&#xff0c;D…

【简单介绍下在Ubuntu中如何设置中文输入法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

二.使用PgAdmin连接Postgresql

二.使用PgAdmin连接Postgresql PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它支持大部分SQL标准并提供了许多高级功能,例如事务、外键、视图、触发器等。PostgreSQL由PostgreSQL全球开发组维护和开发,它是一种高度可扩展的数据库系统,可以在各种操作系统…

echarts 时间线

echarts 时间线 &#xff08;下面附有完整示例&#xff09; 实现思路 1、先分析图片是由一根y轴线和每个小节点组成&#xff1b; 2、可以看出时间线是没有轴的&#xff0c;所以将“ xAxis ”属性隐藏&#xff1b; 3、y轴是没有分割线的所以隐层“ yAxis ”中的“ splitLine ”…

AI网络爬虫:用kimi提取网页中的表格内容

一个网页中有一个很长的表格&#xff0c;要提取其全部内容&#xff0c;还有表格中的所有URL网址。 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写爬取网页表格内容的Python脚步的任务&#xff0c;具体步骤如下&#xff1a; 在F盘新建一个…

控制状态流程图中的消息活动

消息是一个Stateflow对象&#xff0c;用于在本地或图表之间进行数据通信。从发件人图表中&#xff0c;您可以发送或转发邮件。在接收图表中&#xff0c;队列接收消息并将其保存&#xff0c;直到图表能够对其进行评估。 使用Stateflow运算符&#xff0c;您可以访问消息数据&…

[PythonWeb:Django框架]:项目初始化搭建

文章目录 pip查看安装列表安装制定Django版本初始化django项目执行 python manage.py startapp projectName 生成app应用执行 python manage.py runserver 运行web项目settings.py注入应用配置django项目页面访问地址注意&#xff1a;再次访问地址&#xff0c;返回制定页面 pip…

【ubuntu】ubuntu-18.04开机卡在Starting User Manager for UID 120....问题解决方案

错误截图 解决方案 启动系统&#xff0c;开机界面单击按键esc键&#xff0c;注意需要将鼠标定位到菜单界面&#xff0c;移动键盘上下键选择Advanced options for Ubuntu 进入如下菜单&#xff0c;选择recovery mode 回车之后会弹出如下界面&#xff0c;选择如下root&#xff0…

爬虫界的“闪电侠”:异步爬虫与分布式系统的实战秘籍

Hi&#xff0c;我是阿佑&#xff0c;前文给大家讲了&#xff0c;如何做一个合法“采蜜”的蜜蜂&#xff0c;有了这么个自保的能力后&#xff0c;阿佑今天就将和大家踏入 —— 异步爬虫 的大门&#xff01; 异步爬虫大法 1. 引言1.1 爬虫框架的价值&#xff1a;效率与复杂度管理…

得物面试:Redis 内存碎片是什么?如何清理?

> **插&#xff1a;** [AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。](前言 – 床长人工智能教程 ) **坚持不懈&…

Django创建网站的地基

相关文档 1、为新网站创建一个文件夹&#xff08;这里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

基于SpringBoot设计模式之创建型设计模式·生成器模式

文章目录 介绍开始架构图样例一定义生成器定义具体生成器&#xff08;HTML格式、markdown格式&#xff09;实体类HTML格式生成器MarkDown格式生成器 测试样例 总结优点缺点 介绍 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。   如…

C++ | Leetcode C++题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution { public:int numDecodings(string s) {int n s.size();// a f[i-2], b f[i-1], c f[i]int a 0, b 1, c;for (int i 1; i < n; i) {c 0;if (s[i - 1] ! 0) {c b;}if (i > 1 && s[i - 2] ! 0 &&a…

每日一题13:Pandas:方法链

一、每日一题 &#xff1b;&#xff1a;&#xff1a; 解答&#xff1a; import pandas as pddef findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:heavy_animals animals[animals[weight] > 100].sort_values(byweight, ascendingFalse)result heavy_anim…

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…

低代码开发平台在城市数字化转型中的技术实现与案例分析

城市数字化转型需要政策引导、技术创新、基础设施建设、人才培养、多方合作以及安全保障等全方位的支持与助力&#xff0c;共同推动城市的数字化进程&#xff0c;提升其竞争力和可持续发展能力。 其中&#xff0c;技术创新是推动数字化转型的核心动力&#xff0c;需要不断加强…